BodyPositionList.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React from 'react';
  2. import { useSelector, useDispatch } from 'react-redux';
  3. import { useEffect } from 'react';
  4. import { setBodyPositions } from '../../../states/exam/bodyPositionListSlice';
  5. import { RootState } from '../../../states/store';
  6. import { Button } from 'antd';
  7. import { PlusOutlined } from '@ant-design/icons';
  8. import ImageViewer from './ImageViewer';
  9. import { getViewIconUrl } from '../../../API/bodyPosition';
  10. interface BodyPositionListProps {
  11. layout: 'horizontal' | 'vertical';
  12. }
  13. const BodyPositionList: React.FC<BodyPositionListProps> = ({ layout }) => {
  14. const dispatch = useDispatch();
  15. const bodyPositions = useSelector(
  16. (state: RootState) => state.bodyPositionList.bodyPositions
  17. );
  18. const works = useSelector((state: RootState) => state.examWorksCache.works);
  19. const addBodyPositionClick = () => {
  20. // dispatch(addBodyPosition({
  21. // view_name: 'New View',
  22. // view_description: 'Description of the new view',
  23. // view_icon_name: 'icon-name'
  24. // }));
  25. };
  26. useEffect(() => {
  27. alert(
  28. `${works.length} works found == ${works[0].Views.length} views in the first work`
  29. );
  30. const bodyPositions = works
  31. .flatMap((work) => work.Views)
  32. .map((view) => ({
  33. internal_id: view.internal_id,
  34. view_id: view.view_id,
  35. view_name: view.view_name,
  36. view_name_local: view.view_name_local,
  37. view_other_name: view.view_other_name,
  38. view_description: view.view_description,
  39. view_position: view.view_position,
  40. application: view.application,
  41. anatomic_region: view.anatomic_region,
  42. patient_type: view.patient_type,
  43. body_part_id: view.body_part_id,
  44. view_icon_name: view.view_icon_name,
  45. view_big_icon_name: view.view_big_icon_name,
  46. view_coach_name: view.view_coach_name,
  47. modality: view.modality,
  48. work_station_id: view.work_station_id,
  49. apr_id: view.apr_id,
  50. img_proc_id: view.img_proc_id,
  51. sort: view.sort,
  52. is_enabled: view.is_enabled,
  53. product: view.product,
  54. is_pre_install: view.is_pre_install,
  55. procedure_id: view.procedure_id,
  56. }));
  57. dispatch(setBodyPositions(bodyPositions));
  58. }, [works, dispatch]);
  59. return (
  60. <div className={`body-position-list ${layout}`}>
  61. <div>{bodyPositions.length}</div>
  62. {bodyPositions.map((bodyPosition, index) => (
  63. // {/* @/src\pages\exam\components\BodyPositionList.tsx 向ImageViewer传递src属性值时,首先要使用@/src\API\bodyPosition.ts 提供的方法做一个拼接*/}
  64. <ImageViewer
  65. key={index}
  66. src={getViewIconUrl(bodyPosition.view_icon_name)}
  67. className="image-viewer-item"
  68. />
  69. ))}
  70. <Button
  71. icon={<PlusOutlined />}
  72. onClick={addBodyPositionClick}
  73. className="add-button"
  74. />
  75. </div>
  76. );
  77. };
  78. export default BodyPositionList;