{"version":3,"sources":["components/MuiPickers/date-fns-utility.ts","modules/slice/shared/create-slice-utility.ts","modules/slice/shared/create-extend-generic-slice.ts","modules/swagger-clients.ts","modules/web-api-adapter.ts","pages/ConstructionMachineMonitor/MainMonitor/_types/index.ts","_types/index.ts","modules/shared/shared-utility.ts","modules/adapter/machine-monitoring/machine-monitoring-utility.ts","modules/adapter/machine-monitoring/machine-monitoring-adapter.ts","modules/adapter/shared/shared-utility.ts","modules/adapter/shared/shared-adapter.ts","modules/slice/machine-monitoring/machine-monitoring-slice.tsx","modules/slice/global-header/global-header-slice.ts","components/Layout/TopAndBottomLayout.tsx","components/Layout/SinglePageLayout.tsx","components/Layout/TwoColumnLayout.tsx","components/MuiBackDropProgress/MuiBackDropProgress.tsx","components/MuiSnackbar/MuiSnackbar.tsx","components/MuiTable/MuiTableIcons.tsx","components/MuiTable/MuiLocalization.tsx","components/MuiTable/MuiTableOptions.tsx","components/MuiTable/MuiSortHeaderStyle.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/TableContent/CtuTagMachineId.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/TableContent/NoteIconButton.tsx","components/OverflowTooltip.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/TableContent/ConnectedTabletTag.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/TableContent/ConstructionMachineMonitorTable.tsx","pages/Shared/app-url.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/TableContent/ConstructionMachineMonitorTableContainer.tsx","components/Buttons/MuiSearchButton.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/SerachContent/ConstructionMachineMonitorSearch.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/SerachContent/ConstructionMachineMonitorSearchContainer.tsx","components/Buttons/MuiCancelButton.tsx","components/Buttons/MuiUnlockButton.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/UnlockDialog/UnlockDialog.tsx","pages/ConstructionMachineMonitor/MainMonitor/components/UnlockDialog/UnlockDialogContainer.tsx","pages/Shared/app-title.tsx","modules/slice/area-type/area-type-slice-utility.tsx","modules/slice/area-type/area-type-slice.tsx","components/AreaToggleButton/AreaToggleButton.tsx","components/AreaToggleButton/AreaToggleButtonContainer.tsx","pages/ConstructionMachineMonitor/MainMonitor/index.tsx","pages/Shared/HeaderPage/components/Layout/Layout.tsx","pages/Shared/GlobalHeader/components/Layout/Layout.tsx","pages/Shared/GlobalHeader/components/MenuBar/MenuBar.tsx","pages/Shared/GlobalHeader/components/MenuBar/MenuBarContainer.tsx","assets/FudoLogo.png","assets/STLogo.png","pages/Shared/GlobalHeader/components/Logo/Logo.tsx","pages/Shared/GlobalHeader/components/Title/Title.tsx","pages/Shared/GlobalHeader/components/Title/TitleContainer.tsx","modules/slice/theme/theme-slice-utility.ts","modules/slice/theme/theme-slice.ts","components/ThemeToggleButton/ThemeToggleButton.tsx","components/ThemeToggleButton/ThemeToggleButtonContainer.tsx","pages/Shared/GlobalHeader/components/Menu/IconMenu.tsx","components/ThemeToggleButton/ThemeToggleListItemButton.tsx","components/ThemeToggleButton/ThemeToggleListItemButtonContainer.tsx","pages/Shared/GlobalHeader/components/Menu/DrawerManu.tsx","modules/slice/signin/signin-slice-utility.tsx","modules/adapter/account/account-adapter.ts","modules/slice/authentication/authentication-slice.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/_types/index.tsx","pages/Shared/GlobalHeader/components/Menu/MenuContainer.tsx","pages/Shared/GlobalHeader/components/ErrorPopover/ErrorPopover.tsx","pages/Shared/GlobalHeader/components/ErrorPopover/ErrorPopoverContainer.tsx","pages/Shared/GlobalHeader/components/ResetDialog/ResetDialog.tsx","pages/Shared/GlobalHeader/components/ResetDialog/ResetDialogContainer.tsx","pages/Shared/GlobalHeader/GlobalHeader.tsx","pages/Shared/HeaderPage/HeaderPage.tsx","pages/ConstructionMachineMonitor/index.tsx","modules/slice/shared/create-records-slice.ts","modules/adapter/maintenance-record/maintenance-record-utility.ts","pages/ConstructionMachineMaster/_types/index.tsx","modules/adapter/maintenance-record/maintenance-record-adapter.ts","modules/adapter/report/report-utility.ts","modules/adapter/report/report-adapter.ts","modules/slice/maintenance-record/maintenance-record-slice.tsx","pages/ConstructionMachineMaster/Shared/ConstructionMchineMasterTableOptions.tsx","pages/ConstructionMachineMaster/Shared/ConstructionMchineMasterTableStyles.tsx","pages/ConstructionMachineMaster/Shared/components/ReportIconButton/ReportIconButton.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/components/TableContent/MaintenanceRecordTable.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/components/TableContent/MaintenanceRecordTableContainer.tsx","components/MuiPickers/mui-date-picker-utility.ts","components/MuiPickers/MuiKeybordDatePicker.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/components/SearchContent/MaintenanceRecordSearch.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/components/SearchContent/MaintenanceRecordSearchContainer.tsx","components/Buttons/ColorButton/MuiColorButton.tsx","components/Buttons/MuiBackToListButton.tsx","components/Buttons/MuiUpdateButton.tsx","pages/ConstructionMachineMaster/Shared/components/ComfirmDialog/StampTag.tsx","pages/ConstructionMachineMaster/Shared/components/ComfirmDialog/SendBackTag.tsx","pages/ConstructionMachineMaster/Shared/components/ComfirmDialog/InspectionStampConfirmDialog.tsx","pages/ConstructionMachineMaster/Shared/ConstructionMacineMasterUtility.ts","pages/ConstructionMachineMaster/MaintenanceRecord/components/StampContent/InspectionStampForm.tsx","pages/ConstructionMachineMaster/ConstructionRecord/_types/index.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/components/StampContent/StampContainer.tsx","components/ActiveReportViewer/ActiveReportViewer.tsx","pages/ConstructionMachineMaster/Shared/components/ReportViewer/ReportViewer.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/components/ViewerContent/ViewerContainer.tsx","components/Layout/CollapseLayout.tsx","modules/adapter/machine-operation-history/machine-operation-history-utility.ts","modules/adapter/machine-operation-history/machine-operation-history-adapter.ts","modules/slice/machine-operation-history/machine-operation-history-slice-utility.tsx","modules/slice/machine-operation-history/machine-operation-history-slice.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/MainContent/ConstructionRecordMain.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/SearchContent/ConstructionRecordSearch.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/SearchContent/ConstructionRecordSearchContainer.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/CardContent/GraphSelectCard.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/GraphContent/GraphContetntUtility.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/CardContent/ConstructionRecordCardList.tsx","pages/ConstructionMachineMaster/MachineStatus/_types/index.ts","pages/ConstructionMachineMaster/ConstructionRecord/components/CardContent/ConstructionRecordCardListContainer.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/GraphContent/ConstructionRecordGraph.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/GraphContent/ConstructionRecordGraphContainer.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/DownloadContent/DownloadButton.tsx","pages/ConstructionMachineMaster/ConstructionRecord/components/DownloadContent/DownloadButtonContainer.tsx","modules/adapter/machine-status-monitoring/machine-status-monitoring-utility.ts","modules/adapter/machine-status-monitoring/machine-status-monitoring-adapter.ts","modules/slice/machine-status-monitoring/machine-status-monitoring-slice.tsx","pages/ConstructionMachineMaster/MachineStatus/components/ControlMeterStatusCard.tsx","pages/ConstructionMachineMaster/MachineStatus/components/LiftingStatusCard.tsx","pages/ConstructionMachineMaster/MachineStatus/components/ConnectionStatusCard.tsx","pages/ConstructionMachineMaster/MachineStatus/components/MeasuredCard.tsx","pages/ConstructionMachineMaster/MachineStatus/components/AlertParameterCard.tsx","pages/ConstructionMachineMaster/MachineStatus/components/ParameterCard.tsx","pages/ConstructionMachineMaster/MachineStatus/components/CtuVersionInformation.tsx","pages/ConstructionMachineMaster/MachineStatus/components/IpAddressInformation.tsx","pages/ConstructionMachineMaster/Shared/UpdateItem.tsx","pages/ConstructionMachineMaster/MachineStatus/components/MainContent/MachineStausMonitoringMain.tsx","pages/ConstructionMachineMaster/MachineStatus/components/MainContent/MachineStausMonitoringMainContainer.tsx","modules/slice/shared/create-generic-slice.ts","modules/adapter/machine-error-history/machine-error-history-utility.ts","modules/adapter/machine-error-history/machine-error-history-adapter.ts","modules/slice/machine-error-history/machine-error-history-slice.tsx","pages/ConstructionMachineMaster/AlertRecord/components/MainContent/AlertRecordMain.tsx","pages/ConstructionMachineMaster/AlertRecord/components/SearchContent/AlertRecordSearch.tsx","pages/ConstructionMachineMaster/AlertRecord/components/SearchContent/AlertRecordSearchContainer.tsx","pages/ConstructionMachineMaster/AlertRecord/components/TableContent/AlertRecordTable.tsx","pages/ConstructionMachineMaster/AlertRecord/components/TableContent/AlertRecordTableContainer.tsx","pages/ConstructionMachineMaster/AlertRecord/components/GraphContent/AlertRecordGraph.tsx","pages/ConstructionMachineMaster/AlertRecord/components/GraphContent/AlertRecordGraphUtility.tsx","pages/ConstructionMachineMaster/AlertRecord/components/GraphContent/AlertRecordGraphContainer.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/_types/index.ts","modules/adapter/daily-inspection-record/daily-inspection-record-utility.ts","modules/adapter/daily-inspection-record/daily-inspection-record-adapter.ts","modules/slice/daily-inspection-record/daily-inspection-record-slice.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/_types/index.ts","pages/ConstructionMachineMaster/DailyInspectionRecord/components/TableContent/DailyInspectionRecordTable.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/components/TableContent/DailyInspectionRecordTableContainer.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/components/SearchContent/DailyInspectionSearch.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/components/SearchContent/DailyInspectionSearchContainer.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/components/StampContent/InspectionStampForm.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/components/StampContent/StampContainer.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/components/ViewerContent/ViewerContainer.tsx","modules/adapter/weekly-inspection-record/weekly-inspection-record-utility.ts","modules/adapter/weekly-inspection-record/weekly-inspection-record-adapter.ts","modules/slice/weekly-inspection-record/weekly-inspection-record-slice.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/_types/index.ts","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/TableContent/WeeklyInspectionRecordTable.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/TableContent/WeeklyInspectionRecordTableContainer.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/SearchContent/WeeklyInspectionSearch.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/SearchContent/WeeklyInspectionSearchContainer.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/StampContent/InspectionStampForm.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/StampContent/StampContainer.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/components/ViewerContent/ViewerContainer.tsx","modules/adapter/completion-inspection-record/completion-inspection-record-utility.ts","modules/adapter/completion-inspection-record/completion-inspection-record-adapter.ts","modules/slice/completion-inspection-record/completion-inspection-record-slice.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/TableContent/CompletionInspectionRecordTable.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/TableContent/CompletionInspectionRecordTableContainer.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/SearchContent/CompletionInspectionSearch.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/SearchContent/CompletionInspectionSearchContainer.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/StampContent/InspectionStampForm.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/StampContent/StampContainer.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/components/ViewerContent/ViewerContainer.tsx","modules/slice/status-edit/status-edit-slice.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditCard/EditCardContent.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditCardHeader/EditCardHeader.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditCard/EditCard.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditCardRemains/EditCardRemainsContent.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditCardRemains/EditCardRemains.tsx","pages/ConstructionMachineMaster/StatusEdit/components/MainContent/StatusEditMain.tsx","pages/ConstructionMachineMaster/StatusEdit/components/MainContent/StatusEditMainContainer.tsx","components/MuiTextField/mui-text-field-utility.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditDialog/EditDialog.tsx","pages/ConstructionMachineMaster/StatusEdit/components/EditDialog/EditDialogContainer.tsx","pages/ConstructionMachineMaster/StatusEdit/components/ResetHistoryTable/ResetHistoryTable.tsx","pages/ConstructionMachineMaster/StatusEdit/components/ResetHistoryTable/ResetHistoryTableContainer.tsx","pages/ConstructionMachineMaster/StatusEdit/components/HistoryDialog/HistoryDialog.tsx","pages/ConstructionMachineMaster/StatusEdit/components/HistoryDialog/HistoryDialogContainer.tsx","pages/ConstructionMachineMaster/ConstructionMachineMasterTab/component/TabList/TabListUtility.tsx","pages/ConstructionMachineMaster/MaintenanceRecord/index.tsx","pages/ConstructionMachineMaster/DailyInspectionRecord/index.tsx","pages/ConstructionMachineMaster/WeeklyInspectionRecord/index.tsx","pages/ConstructionMachineMaster/CompletionInspectionRecord/index.tsx","pages/ConstructionMachineMaster/ConstructionRecord/index.tsx","pages/ConstructionMachineMaster/MachineStatus/index.tsx","pages/ConstructionMachineMaster/StatusEdit/index.tsx","pages/ConstructionMachineMaster/AlertRecord/index.tsx","components/Layout/TabPageContentLayout.tsx","pages/ConstructionMachineMaster/ConstructionMachineMasterTab/component/TabList/TabList.tsx","pages/ConstructionMachineMaster/ConstructionMachineMasterTab/index.tsx","pages/ConstructionMachineMaster/index.tsx","pages/Report/OtherReport/_types/index.tsx","modules/adapter/other-report/other-report-utility.ts","modules/adapter/other-report/other-report-adapter.ts","modules/slice/other-report/other-report-slice.tsx","pages/Report/OtherReport/conponents/TableContent/OtherReportTable.tsx","pages/Report/OtherReport/conponents/TableContent/OtherReportTableContainer.tsx","pages/Report/OtherReport/conponents/SearchContent/OtherReportSearch.tsx","pages/Report/OtherReport/conponents/SearchContent/OtherReportSearchContainer.tsx","pages/Report/OtherReport/conponents/ReportImageGallery/ReportImageGallery.tsx","pages/Report/OtherReport/conponents/ReportDetailDialog/ReportDetailDialog.tsx","pages/Report/OtherReport/conponents/ReportDetailDialog/ReportDetailDialogContainer.tsx","pages/Report/OtherReport/index.tsx","pages/Report/index.tsx","modules/slice/shared/create-master-slice.ts","modules/adapter/maintenance-item/maintenance-item-utility.ts","modules/adapter/maintenance-item/maintenance-item-adapter.ts","modules/slice/maintenance-item/maintenance-item-slice.tsx","pages/Master/Shared/MasterTableOptions.tsx","pages/Master/Shared/MasterTableFrame.tsx","pages/Master/MaintenanceItem/components/TableContent/MaintenanceItemResultTable.tsx","pages/Master/MaintenanceItem/components/TableContent/MaintenanceItemResultTableContainer.tsx","components/Buttons/MuiCreateButton.tsx","components/Buttons/MuiPreviewButton.tsx","pages/Master/Shared/components/ViewerDrawer/MaintenancePreviewDrawer.tsx","pages/Master/MaintenanceItem/components/SearchContent/MaintenanceItemSearchCondition.tsx","pages/Master/MaintenanceItem/components/SearchContent/MaintenanceItemSearchConditionContainer.tsx","components/Buttons/MuiAddButton.tsx","components/Buttons/MuiRemoveButton.tsx","pages/Master/Shared/MasterDetailButtonGroup.tsx","pages/Master/MaintenanceItem/components/DetailContent/MaintenanceItemDetailCondition.tsx","pages/Master/MaintenanceItem/components/DetailContent/MaintenanceItemDetailConditionContainer.tsx","pages/Master/Shared/components/ConfirmDialog/ConfirmDialog.tsx","pages/Master/MaintenanceItem/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/Shared/MasterLayout.tsx","pages/Master/MaintenanceItem/index.tsx","modules/adapter/maintenance-division/maintenance-division-utility.ts","modules/adapter/maintenance-division/maintenance-division-adapter.ts","modules/slice/maintenance-division/maintenance-division-slice.tsx","pages/Master/MaintenanceDivision/components/TableContent/MaintenanceDivisionResultTable.tsx","pages/Master/MaintenanceDivision/components/TableContent/MaintenanceDivisionResultTableContainer.tsx","pages/Master/MaintenanceDivision/components/SearchContent/MaintenanceDivisionSearchCondition.tsx","pages/Master/MaintenanceDivision/components/SearchContent/MaintenanceDivisionSearchConditionContainer.tsx","pages/Master/MaintenanceDivision/components/DetailContent/MaintenanceDivisionDetailCondition.tsx","pages/Master/MaintenanceDivision/components/DetailContent/MaintenanceDivisionDetailConditionContainer.tsx","pages/Master/MaintenanceDivision/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/MaintenanceDivision/index.tsx","modules/adapter/machine/machine-utility.ts","modules/adapter/machine/machine-adapter.ts","modules/slice/machine/machine-slice.tsx","pages/Master/Machine/components/TableContent/MachineResultTable.tsx","pages/Master/Machine/components/TableContent/MachineResultTableContainer.tsx","pages/Master/Machine/components/SearchContent/MachineSearchCondition.tsx","pages/Master/Machine/components/SearchContent/MachineSearchConditionContainer.tsx","pages/Master/Machine/components/DetailContent/MachineDetailCondition.tsx","pages/Master/Machine/components/DetailContent/MachineDetailConditionContainer.tsx","pages/Master/Machine/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/Machine/index.tsx","modules/adapter/inspection-division/inspection-division-utility.ts","modules/adapter/inspection-division/inspection-division-adapter.ts","modules/slice/inspection-division/inspection-division-slice.tsx","pages/Master/InspectionDivision/components/TableContent/InspectionDivisionResultTable.tsx","pages/Master/InspectionDivision/components/TableContent/InspectionDivisionResultTableContainer.tsx","pages/Master/Shared/components/ViewerDrawer/InspectionPreviewDrawer.tsx","pages/Master/InspectionDivision/components/SearchContent/InspectionDivisionSearchCondition.tsx","pages/Master/InspectionDivision/components/SearchContent/InspectionDivisionSearchConditionContainer.tsx","pages/Master/InspectionDivision/components/DetailContent/InspectionDivisionDetailCondition.tsx","pages/Master/InspectionDivision/components/DetailContent/InspectionDivisionDetailConditionContainer.tsx","pages/Master/InspectionDivision/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/InspectionDivision/index.tsx","modules/adapter/inspection-item/inspection-item-utility.ts","modules/adapter/inspection-item/inspection-item-adapter.ts","modules/slice/inspection-item/inspection-item-slice.tsx","pages/Master/InspectionItem/components/TableContent/InspectionItemResultTable.tsx","pages/Master/InspectionItem/components/TableContent/InspectionItemResultTableContainer.tsx","pages/Master/InspectionItem/components/SearchContent/InspectionItemSearchCondition.tsx","pages/Master/InspectionItem/components/SearchContent/InspectionItemSearchConditionContainer.tsx","pages/Master/InspectionItem/components/DetailContent/InspectionItemDetailCondition.tsx","pages/Master/InspectionItem/components/DetailContent/InspectionItemDetailConditionContainer.tsx","pages/Master/InspectionItem/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/InspectionItem/index.tsx","modules/adapter/model/model-utility.ts","modules/adapter/model/model-adapter.ts","modules/slice/model/model-slice.tsx","pages/Master/MachineModel/components/TableContent/MachineModelResultTable.tsx","pages/Master/MachineModel/components/TableContent/MachineModelResultTableContainer.tsx","pages/Master/MachineModel/components/SearchContent/MachineModelSearchCondition.tsx","pages/Master/MachineModel/components/SearchContent/MachineModelSearchConditionContainer.tsx","pages/Master/MachineModel/components/DetailContent/MachineModelDetailCondition.tsx","pages/Master/MachineModel/components/DetailContent/MachineModelDetailConditionContainer.tsx","pages/Master/MachineModel/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/MachineModel/index.tsx","modules/adapter/manufacturer/manufacturer-utility.ts","modules/adapter/manufacturer/manufacturer-adapter.ts","modules/slice/manufacturer/manufacturer-slice.tsx","pages/Master/Manufacturer/components/TableContent/ManufacturerResultTable.tsx","pages/Master/Manufacturer/components/TableContent/ManufacturerResultTableContainer.tsx","pages/Master/Manufacturer/components/SearchContent/ManufacturerSearchCondition.tsx","pages/Master/Manufacturer/components/SearchContent/ManufacturerSearchConditionContainer.tsx","pages/Master/Manufacturer/components/DetailContent/ManufacturerDetailCondition.tsx","pages/Master/Manufacturer/components/DetailContent/ManufacturerDetailConditionContainer.tsx","pages/Master/Manufacturer/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/Manufacturer/index.tsx","modules/adapter/method/method-utility.ts","modules/adapter/method/method-adapter.ts","modules/slice/method/method-slice.tsx","pages/Master/Method/components/TableContent/MethodResultTable.tsx","pages/Master/Method/components/TableContent/MethodResultTableContainer.tsx","pages/Master/Method/components/SearchContent/MethodSearchCondition.tsx","pages/Master/Method/components/SearchContent/MethodSearchConditionContainer.tsx","pages/Master/Method/components/DetailContent/MethodDetailCondition.tsx","pages/Master/Method/components/DetailContent/MethodDetailConditionContainer.tsx","pages/Master/Method/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/Method/index.tsx","modules/adapter/user/user-utility.ts","modules/adapter/user/user-adapter.ts","modules/slice/user/user-slice.tsx","pages/Master/User/components/TableContent/SigninUserTag.tsx","pages/Master/User/components/TableContent/UserResultTable.tsx","pages/Master/User/components/TableContent/UserResultTableContainer.tsx","pages/Master/User/components/SearchContent/UserSearchCondition.tsx","pages/Master/User/components/SearchContent/UserSearchConditionContainer.tsx","pages/Master/User/components/DetailContent/UserDetailCondition.tsx","pages/Master/User/components/DetailContent/UserDetailConditionContainer.tsx","pages/Master/User/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/User/components/UpdateDialog/SignoutDialog.tsx","pages/Master/User/components/UpdateDialog/SignoutDialogContainer.tsx","pages/Master/User/index.tsx","modules/adapter/remarks/remarks-utility.ts","modules/adapter/remarks/remarks-adapter.ts","modules/slice/remarks/remarks-slice.tsx","pages/Master/Remarks/components/TableContent/RemarksResultTable.tsx","pages/Master/Remarks/components/TableContent/RemarksResultTableContainer.tsx","pages/Master/Remarks/components/SearchContent/RemarksSearchCondition.tsx","pages/Master/Remarks/components/SearchContent/RemarksSearchConditionContainer.tsx","pages/Master/Remarks/components/DetailContent/RemarksDetailCondition.tsx","pages/Master/Remarks/components/DetailContent/RemarksDetailConditionContainer.tsx","pages/Master/Remarks/components/ConfirmDialog/ConfirmDialogContainer.tsx","pages/Master/Remarks/index.tsx","pages/Master/MasterTab/components/TabList/TabListUtility.tsx","pages/Master/MasterTab/components/TabList/TabList.tsx","pages/Master/MasterTab/index.tsx","pages/Master/index.tsx","modules/slice/signin/signin-slice.tsx","assets/LogoFudo.svg","assets/LogoST.svg","pages/Account/Signin/components/SigninForm/SigninForm.tsx","pages/Account/Signin/components/SigninForm/SigninFormContainer.tsx","pages/Account/Signin/index.tsx","pages/Account/index.tsx","pages/FileManager/FileManage/_types/index.ts","modules/adapter/file-manage/file-manage-utility.ts","modules/adapter/file-manage/file-manage-adapter.ts","modules/slice/file-manage/file-manage-slice.tsx","pages/FileManager/FileManage/components/HeaderContent/ControlButtons.tsx","pages/FileManager/FileManage/components/HeaderContent/ControlButtonsContainer.tsx","pages/FileManager/FileManage/components/DialogContents/CreateFolderDialog.tsx","pages/FileManager/FileManage/components/DialogContents/CreateFolderDialogContainer.tsx","pages/FileManager/FileManage/components/HeaderContent/HomeTypeToggle.tsx","pages/FileManager/FileManage/components/HeaderContent/HomeTypeToggleContainer.tsx","pages/FileManager/FileManage/components/DialogContents/DeleteDialogContainer.tsx","pages/FileManager/FileManage/components/TableContent/S3FileTable.tsx","pages/FileManager/FileManage/components/TableContent/TableTitle.tsx","pages/FileManager/FileManage/components/TableContent/S3FileTableContainer.tsx","pages/FileManager/FileManage/components/DialogContents/UploadDialog.tsx","pages/FileManager/FileManage/components/DialogContents/UploadDialogContainer.tsx","pages/FileManager/FileManage/components/DialogContents/UploadResultDialog.tsx","pages/FileManager/FileManage/components/DialogContents/UploadResultDialogContainer.tsx","pages/FileManager/FileManage/components/DialogContents/DeleteResultDialog.tsx","pages/FileManager/FileManage/components/DialogContents/DeleteResultDialogContainer.tsx","pages/FileManager/FileManage/index.tsx","pages/FileManager/index.tsx","theme/commonTheme.ts","theme/defaultTheme.ts","theme/darkTheme.ts","theme/theme-utility.ts","pages/Shared/ThemeFrame/ThemeFrame.tsx","pages/Shared/AuthorizeRouter/components/AuthorizeLoading/AuthorizeLoading.tsx","pages/Shared/AuthorizeRouter/components/AuthorizeError/AuthorizeError.tsx","pages/Shared/AuthorizeRouter/components/AuthorizePage/AuthorizePage.tsx","pages/Shared/AuthorizeRouter/AuthorizeRouter.tsx","App.tsx","registerServiceWorker.js","rootReducer.ts","store.ts","index.tsx"],"names":["ExtendedDateFnsUtils","date","format","locale","this","DateFnsUtils","CreateSliceUtility","DefualtErrorMessage","DefualtSuccessMessage","createExtendGenericSlice","name","initialState","reducers","createSlice","fetchStart","state","isLoading","isShowMessage","message","fetchSuccess","action","result","payload","fetchFailure","fetchEnd","showMessage","showSuccessMessage","type","text","showErrorMessage","hideMessage","updateItem","item","updateItemPartial","WebApiClient","options","token","localStorage","getItem","antiForgeryLocalStorageKey","Promise","resolve","credentials","headers","_antiForgeryHeaderName","_url","response","func","_antiForgeryFormFieldName","OtherReportSearchType","SharedClient","baseUrl","http","jsonParseReviver","undefined","window","url_","replace","transformOptions","method","then","transformedOptions_","fetch","_response","transformResult","processGetModel","status","_headers","forEach","v","k","_responseText","resultData200","JSON","parse","GetModelOutput","fromJS","throwException","processGetManufacturer","GetManufacturerOutput","processGetMachineType","GetMachineTypeOutput","processGetMaintenanceDivision","GetMaintenanceDivisionOutput","processGetInspectionGroup","GetInspectionGroupOutput","processGetInspectionDivision","GetInspectionDivisionOutput","processGetCtu","GetCtuOutput","input","options_","body","stringify","processGetMachineError","GetMachineErrorOutput","processGetAllMachineError","GetAllMachineErrorOutput","processCheckPassword","CheckPasswordOutput","processGetAuthenticatedUser","GetAuthenticatedUserOutput","OtherReportClient","processGet","GetOtherReportOutput","ReportClient","processGetDailyReport","GetDailyReportOutput","processGetWeeklyReport","GetWeeklyReportOutput","processGetCompletionReport","GetCompletionReportOutput","processGetMaintenanceReport","GetMaintenanceReportOutput","processGetDailyPreviewReport","processGetWeeklyPreviewReport","processGetCompletionPreviewReport","processGetMaintenancePreviewReport","processUpdateDailyInspectedStamp","UpdateDailyInspectedStampOutput","processUpdateWeeklyInspectedStamp","UpdateWeeklyInspectedStampOutput","processUpdateCompletionInspectedStamp","UpdateCompletionInspectedStampOutput","processUpdateMaintenanceInspectedStamp","UpdateMaintenanceInspectedStampOutput","InspectionDivisionClient","InspectionDivisionOutput","processAdd","processUpdate","processRemove","InspectionItemClient","InspectionItemOutput","MachineClient","MachineOutput","MaintenanceDivisionClient","MaintenanceDivisionOutput","MaintenanceItemClient","MaintenanceItemOutput","ManufacturerClient","ManufacturerOutput","MethodClient","MethodOutput","ModelClient","ModelOutput","RemarksClient","RemarksOutput","UserClient","UserOutput","CompletionInspectionRecordClient","GetCompletionInspectionRecordOutput","DailyInspectionRecordClient","GetDailyInspectionRecordOutput","MachineErrorHistoryClient","GetMachineErrorHistoryOutput","MachineMonitoringClient","GetMachineMonitoringOutput","processUnlock","UnlockMachineMonitoringOutput","MachineOperationHistoryClient","GetMachineOperationHistoryOutput","MachineStatusMonitoringClient","GetMachineStatusMonitoringOutput","processGetClientRequest","GetClientRequestOutput","processAddOrUpdateClientRequest","AddOrUpdateClientRequestOutput","processGetClientResetHistory","GetResetHistoryOutput","MaintenanceRecordClient","GetMaintenanceRecordOutput","WeeklyInspectionRecordClient","GetWeeklyInspectionRecordOutput","AccountClient","returnUrl","encodeURIComponent","processSignIn","SignInOutput","processGetToken","GetTokenOutput","ErrorOutput","data","isError","errorMessage","_data","json","toJSON","init","property","hasOwnProperty","Error","items","Array","isArray","push","KeyValuePairOfIntegerAndString","key","value","KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString","maintenanceItems","ctuError","GetMachineErrorInput","machineId","machineIds","CheckPasswordInput","password","userId","userName","inspector","OtherReportItem","reportNo","reportAt","reportItem","areaId","site","reporter","imageDirectoryPath","imageFilePath","GetOtherReportInput","searchType","searchWord","isSavedImage","searchBeginAt","searchEndAt","DayOfWeek","GetReportOutputBase","reportUrl","stampItems","KeyValueItemOfDayOfWeekAndInspectedStampItem","InspectedStampItem","WeekOfMonth","firstTeamLeader","completeTeamLeader","firstManager","completeManager","exist","isChecked","GetReportInputBase","GetDailyReportInput","KeyValueItemOfWeekOfMonthAndInspectedStampItem","MachineType","GetWeeklyReportInput","stampItem","GetCompletionReportInput","GetMaintenanceReportInput","machineType","ConnectedCtuType","GetMaintenancePreviewReportInput","UpdateInspectedStampOutputBase","UpdateDailyInspectedStampInput","UpdateWeeklyInspectedStampInput","UpdateCompletionInspectedStampInput","UpdateMaintenanceInspectedStampInput","InspectionDivisionItem","id","groupId","groupName","weight","lockVersion","InspectionDivisionInput","InspectionItemItem","divisionId","divisionName","groupTypeId","groupTypeName","unit","inputLowerLimit","inputHigherLimit","lightAlarmLowerLimit","lightAlarmHigherLimit","heavyAlarmLowerLimit","heavyAlarmHigherLimit","remarks","InspectionItemInput","MachineItem","typeId","typeName","modelId","modelName","manufacturerId","manufacturerName","modelYear","connectedCtu","ctuId","maintenanceCtuId","CompletionInspectionRecordSearchType","MachineInput","MaintenanceDivisionItem","machineTypeId","machineTypeName","MaintenanceDivisionInput","MaintenanceItemItem","MaintenanceItemInput","ManufacturerItem","ManufacturerInput","MethodItem","MethodInput","ModelItem","ModelInput","RemarksItem","remarksId","title","RemarksInput","UserItem","oldId","newId","inspectorName","UserInput","CompletionInspectionRecordItem","inspectionAt","worker","report","isInspected","GetCompletionInspectionRecordInput","DailyInspectionRecordSearchType","DailyInspectionRecordItem","GetDailyInspectionRecordInput","AreaType","counts","MachineErrorHistoryItem","KeyValuePairOfDateTimeAndInteger","errorOccurredAt","errorContent","GetMachineErrorHistoryInput","beginAt","endAt","MachineMonitoringItem","machines","isLock","tabletId","isConectedTablet","selfInspection","KeyValueItemOfMachineTypeAndMachineItem","MachineItem2","manufacturer","model","MachineMonitoringSearchType","GetMachineMonitoringInput","searchSite","searchReportItem","MachineStatus","UnlockMachineMonitoringInput","MachineOperationHistoryItem","registerAt","engineOperatingTime","liftingDistance","augerRotationTime","engineRotationTimeAvg","batteryVoltageAvg","liftingPressureMax","oilTemperatureAvg","errors","GetMachineOperationHistoryInput","lastUpdatedAt","ipAddress","MachineStatusMonitoringItem","MachineDataType","ResetSubRequestType","GetMachineStatusMonitoringInput","resetItems","ResetRequestItem","hrMeter","parameter","RequestType","GetClientRequestInput","AddOrUpdateClientRequestInput","reset","MaintenanceRecordSearchType","ResetHistoryItem","resetHistories","KeyValueItemOfDateTimeAndString","GetResetHistroyInput","subRequestId","MaintenanceRecordItem","maintenanceAt","GetMaintenanceRecordInput","WeeklyInspectionRecordSearchType","WeeklyInspectionRecordItem","GetWeeklyInspectionRecordInput","CompletionReportResultStatus","SignInInput","InputBase","GetDocumentInput","SwaggerException","isSwaggerException","obj","InspectionType","WebApiAdapter","client","messageFailedCommunication","SharedUtility","source","getFullYear","getMonth","toString","padStart","getDate","isSeconds","getHours","getMinutes","getSeconds","toDateString","toTimeString","DtoAreaType","East","West","DtoMachineType","BaseMachine","Auger","Lift","DtoConnectedCtuType","NotApplicable","Connected","Disconnected","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","milliSecondStr","getMilliseconds","DtoDayOfWeek","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","DayOfWeekStrings","find","DtoWeekOfMonth","First","Second","Third","Fourth","Fifth","WeekOfMonthStrings","MachineMonitoringUtility","baseMachine","toMachineData","auger","lift","areaType","toAreaType","isConnectedTablet","ctu","machineItem","toConectedCtu","None","DtoSearchType","BaseMachineId","AugerMachineId","LiftMachineId","MachineMonitoringAdapter","Object","seal","createErrorResult","machineKeyword","toSearchType","siteKeyword","reportKeyword","get","output","toListItem","unlock","instance","toKeyValueItems","SharedAdapter","errorMachineIds","toKeyValueItemsList","requestType","createResultFunc","createErrorResultFunc","Model","getModel","Manufacturer","getManufacturer","getMachineType","CtuId","getCtu","MaintenanceDivision","getMaintenanceDivision","InspectionGroup","getInspectionGroup","InspectionDivision","getInspectionDivision","getCoreAsync","res","createItemsResult","createErrorItemsResult","createCtuErrorResult","createItemsListResult","createErrorItemsListResult","getMachineError","createMachineErrorItemErrorResult","getAllMachineError","createAllMachineErrorItemErrorResult","checkPassword","createCheckPasswordItemErrorResult","getAuthenticatedUser","createAuthenticatedUserErrorResult","user","PageType","MachineMonitoringSlice","isOpenDialog","timerId","inputItem","toggleDialog","selectedRow","selectedRowItem","stopReloadTimer","clearTimeout","startReloadTimer","changeInputItem","clearInputItem","onGetAsync","dispatch","actions","machineWaiter","getAsync","errorMachineWaiter","getAllMachineErrorAsync","all","machineResult","errorMachineResult","updateCtuMachineError","length","setCtuMachineErrorOn","onUnlockAsync","unlockAsync","onGetReloadAsync","timer","setTimeout","pageType","Home","ctuErrorMachine","isExistMachineError","GlobalHeaderSlice","changeHeader","changeTitle","changePageType","changeMachine","machine","changeError","filter","index","self","indexOf","resetCtuMachineError","changeRecordPageHeader","Record","changeMasterPageHeader","Master","changeReportPageHeader","Report","onCloseDialog","useStyles","makeStyles","theme","createStyles","root","display","flexDirection","justifyContent","TopAndBottomLayout","props","classes","Box","className","component","topContent","bottomContent","SinglePageLayout","Paper","square","elevation","children","sideWidth","searchBox","width","padding","spacing","tableBox","flexGrow","TwoColumnLayout","side","main","backdrop","zIndex","modal","color","MuiBackDropProgress","Backdrop","open","CircularProgress","size","MuiSnackbar","handleClose","event","reason","onClose","Snackbar","isOpen","autoHideDuration","variant","severity","MuiTableIcons","Add","forwardRef","ref","Check","Clear","Delete","DetailPanel","Edit","Export","Filter","FirstPage","LastPage","NextPage","PreviousPage","ResetSearch","Search","SortArrow","ThirdStateCheck","ViewColumn","MuiLocalizationJapanese","error","emptyDataSourceMessage","filterRow","filterTooltip","editRow","saveTooltip","cancelTooltip","deleteText","addTooltip","deleteTooltip","editTooltip","header","grouping","groupedBy","placeholder","pagination","firstTooltip","firstAriaLabel","previousTooltip","previousAriaLabel","nextTooltip","nextAriaLabel","labelDisplayedRows","labelRowsPerPage","lastTooltip","lastAriaLabel","labelRowsSelect","toolbar","addRemoveColumns","nRowsSelected","showColumnsTitle","showColumnsAriaLabel","exportTitle","exportAriaLabel","exportName","searchTooltip","searchPlaceholder","MuiTableOptions","search","sorting","tableLayout","emptyRowsWhenPaging","pageSize","pageSizeOptions","useSortHeaderStyles","sortHeader","palette","primary","overflowY","borderStyle","borderRadius","borderColor","disabled","borderWidth","ctuTag","fontSize","backgroundColor","CtuTagMachineId","alignItems","noteIconBox","flexWrap","secondary","lockIcon","success","emptyNumber","marginLeft","machineIdContainer","machineIdColor","machineIdColorError","contrastText","disconnected","paddingLeft","noteButton","NoteIconButton","clsx","Button","startIcon","onClick","onNoteClick","tooltip","whiteSpace","overflow","textOverflow","OverflowTooltip","textElementRef","useRef","compareSize","current","compare","scrollWidth","clientWidth","setHover","useEffect","addEventListener","removeEventListener","useState","hoverStatus","Tooltip","interactive","disableHoverListener","Typography","chip","cyan","ConnectedTabletTag","Chip","label","ConstructionMachineTable","columnData","field","render","rowData","cellStyle","minWidth","customSort","a","b","maxWidth","headerStyle","useTheme","columns","values","setValues","icons","localization","filtering","indigo","maxBodyHeight","minBodyHeight","rowStyle","fade","renderRowStyle","dataSource","onRowClick","hundleRowClick","onOrderChange","orderBy","orderDirection","map","column","defaultSort","AppUrl","path","accountSignIn","machineMonitoring","otherReport","fileManage","master","masterMachine","masterModel","masterManufacturer","masterMethod","masterMaintenanceDivisioin","masterMaintenanceItem","masterRemarks","masterInspectionDivision","masterInspectionItem","masterUser","record","recordMaintenanceRecord","recordDailyInspectionRecord","recordWeeklyInspectionRecord","recordCompletionInspectionRecord","recordConstructionRecord","recordMachineStatus","recordMachineMaintenanceSetting","recordAlertRecord","ConstructionMachineMonitorTableContainer","history","useHistory","useDispatch","useSelector","area","areaTypeFilter","selectedMachine","ctrlKey","preventDefault","pathname","navigateMachineMaster","MuiSearchButton","radioGroupLabel","fontWeight","marginTop","radioGroup","marginBottom","button","groupContainer","position","groupTitle","paddingRight","top","left","background","paper","ConstructionMachineMonitorSearch","radioButtons","isInputChange","setIsInputChange","onInputChange","target","parseInt","TextField","fullWidth","onChange","RadioGroup","FormControlLabel","control","Radio","onSearchClick","ConstructionMachineMonitorSearchContainer","onSearchClickAsync","MuiCancelButton","amber","MuiUnlockButton","marginRight","machinBox","margin","machineTitle","UnlockDialog","setOpen","Dialog","keepMounted","DialogTitle","disableTypography","DialogContent","Grid","container","xs","Divider","DialogActions","onUnlockClick","UnlockDialogContainer","onUnlockClickAsync","AppTitle","app","AreaTypeUtility","parsedValue","Number","isNaN","Cookies","KeyAreaType","expires","getStorageAreaType","setStorageAreaType","areaTypeSlice","setAreaType","border","divider","grouped","shape","AreaToggleButton","ToggleButtonGroup","exclusive","onChangeArea","ToggleButton","AreaToggleButtonContainer","extendExpiresAreaType","selectedAera","selectedArea","ConstructionMachineMonitoringPage","Layout","style","paddingTop","paddingBottom","group","hidden","visibility","logo","errorPopover","menu","appBar","grey","menuButton","textAlign","overflowWrap","height","MenuBar","isShowCtuError","isCtuError","AppBar","Toolbar","MenuBarContainer","globalHeader","Logo","alt","src","FudoLog","STLogo","Title","isShowMachine","ml","renderMachine","TitleContainer","ThemeSliceUtility","KeyTheme","setItem","isDark","getStorageTheme","themeSlice","setTheme","changeDarkTheme","setStorageTheme","ThemeToggleButton","MenuItem","onClickDarkThemeOff","onClickDarkThemeOn","ThemeToggleButtonContainer","menuIcon","breakpoints","down","menuItem","IconMenu","anchorElMaster","anchorElUser","onMasterItemClick","IconButton","onHomeClick","HomeOutlined","onReportClick","ListAltOutlined","onUploadClick","CloudUpload","currentTarget","SettingsOutlined","AccountCircleOutlined","anchorEl","getContentAnchorEl","anchorOrigin","vertical","horizontal","transformOrigin","Boolean","selected","locatedPath","e","onSingoutClick","ThemeToggleListItemButton","ListItem","ListItemText","inset","ThemeToggleListItemButtonContainer","drawerIcon","up","list","DrawerMenu","showDrawer","masterCollpase","userCollpase","cloaseDrawer","edge","Drawer","anchor","List","ListItemIcon","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","disablePadding","SigninUtility","KeyIsSignedIn","Date","getTime","AccountAdapter","signIn","signInOutput","getToken","tokenOutput","reject","removeItem","StampSearchType","AuthenticationSlice","isLoaded","setUser","clearUser","startAuthentication","errorAuthentication","endAuthentication","userSignOut","onSignOutAsync","removeStorageIsSignedIn","signOutAsync","location","href","MenuContainer","useLocation","authentication","onNavigate","onSingoutClickAsync","card","cardContents","maxHeight","errorIcon","ErrorPopover","React","setAnchorEl","isShow","Popover","Card","onRestClick","CardContent","ErrorPopoverContainer","machineBox","ResetDialog","onResetClick","ResetDialogContainer","onReset","GlobalHeader","HeaderPage","ConstructionMachineMonitorPage","createReportListSlice","isUpdated","setItems","resultItems","setReport","clearReport","toggleViewre","isOpenViewer","selectItem","selectedItem","changeUpdatedFlag","changeReportLoadingFlag","isReportLoading","StampUpdateStaus","InspecterType","MaintenanceRecordUtility","dateAt","no","completionDate","constructionMethod","toAreaText","isStamped","Place","Site","Worker","Done","NotYet","MaintenanceRecordAdapter","fromMachineType","keyword","toFormatDateString","toisInspected","searchStampType","ReportUtility","DtoInspectedStampItem","toDtoInspectedStampItem","toDtoInspectedStampItems","getInspecterName","FirstTeamLeader","CompleteTeamLeader","FirstManager","CompleteManager","entries","inspecterType","toMaintenanceInspectedStampItem","toDayOfWeek","toInspectedStampItem","toWeekOfMonth","ReportAdapter","createGetErrorResult","toGetMaintenanceReportInput","getMaintenanceReport","createMaintenanceReportErrorResult","toMaintenaceReportInspectedStampItem","toGetDailyReportInput","getDailyReport","createDailyReportErrorResult","toDailyReportInspectedStampItem","toGetWeeklyReportInput","getWeeklyReport","createWeeklyReportErrorResult","toWeeklyReportInspectedStampItem","toGetCompletionReportInput","getCompletionReport","createCompletionReportErrorResult","toGetMaintenancePreviewReportInput","getMaintenancePreviewReport","getDailyPreviewReport","getWeeklyPreviewReport","getCompletionPreviewReport","toUpdateMaintenanceInspectedStampInput","updateMaintenanceInspectedStamp","createUpdateErrorResult","toUpdateDailyInspectedStampInput","updateDailyInspectedStamp","toUpdateWeeklyInspectedStampInput","updateWeeklyInspectedStamp","toUpdateCompletionInspectedStampInput","updateCompletionInspectedStamp","MaintenanceRecordSlice","getResultWaiter","machineErrorResultWaiter","getErrorAsync","promiseResult","getResult","machineErrorResult","isCtuEror","onGetMaintenanceReportAsync","onUpdateMaintenanceInspectedStampAsync","updateParam","getParam","ConstructionMchineMasterOptions","icon","iconStamped","ReportIconButton","MaintenanceRecordTable","onDocumentClickAysnc","components","Row","rowProps","onDoubleClick","MaintenanceRecordTableContainer","maintenanceRecord","onDocumentClickAsync","MuiDatePickerUtility","invalidDateMessage","invalidLabel","maxDateMessage","minDateMessage","dateFormat","yearAndMonthFormat","MuiKeybordDatePicker","autoOk","inputVariant","toFrom","writingMode","MaintenanceRecordSearch","stampSearchTypeRadioButton","initInputItem","FormControl","disableToolbar","newValue","setHours","compEndAt","compBeginAt","preValues","onChangeBeginAt","onChangeEndAt","initState","setMonth","MaintenanceSearchContainer","setValue","dark","warning","MuiColorButton","overrideColor","MuiBackToListButton","MuiUpdateButton","StampTag","deepOrange","SendBackTag","subtitle","dialogContent","table","pointerEvents","InspectionConfirmDialog","align","row","isStampBefore","isStampAfter","Stamp","SendBack","checkEnableUpdate","listItem","some","disableBackdropClick","inspectionName","paging","Container","onUpdateClick","ConstructionMacineMasterUtility","InspecterTypeStrings","toInspecterTypeText","toInspecterString","toDayOfWeekText","toInspectedStampString","toWeekOfMonthText","before","after","checkedId","includes","toDailyInspectionRadioLableString","getUpdateStatus","toWeeklyInspectionRadioLableString","toCompletionInspectionRadioLableString","toMaintenanceInspectionRadioLableString","inspecterItem","GraphType","reduce","InspectionStampForm","stampDatas","checkedValues","setCheckedValues","onBackClick","FormGroup","Checkbox","checked","newIds","val","handleSelect","convertMaintenanceListItem","StampContainer","inspectionStampItems","inputItems","toUpdateMaintenanceInspectedStampItem","ActiveReportViewer","viewer","viewerId","exportEnabledLayout","exportDisabledLayout","GrapeCity","ActiveReports","JSViewer","create","element","reportID","documentLoaded","reportInfo","loadedReport","desktop","layout","fullscreen","mobile","reportLoaded","console","log","sidebar","toggle","exportDisabledButton","iconCssClass","enabled","reportName","match","exportEnabledButton","export","FileName","addItem","_viewer","viewMode","prevProps","coustomButtonExport","openReport","Component","ReportViewer","ViewerContainer","collapse","CollapseLayout","isExpanded","defaultContent","expandContent","MachineOperationHistoryUtility","MachineOperationHistoryAdapter","toGraphItem","url","MachineOperationHistorySliceUtility","array","from","Set","slice","MaxDisplayCount","MachineOperationHistorySlice","getCsvResult","dataList","fetchEndExtension","onChangeDispayGraph","shiftArray","ConstructionRecordMain","cards","mt","csvButton","graph","ConstructionRecordSearch","ConstructionRecordSerchContainer","buttonBase","minHeight","cardActive","cardContent","titleActive","titleColor","opacity","transform","iconActive","iconColor","GraphSelectCard","ButtonBase","isActive","GraphContentUtility","constantString","htmlId","x1","y1","x2","y2","offset","stopColor","stopOpacity","cx","cy","r","fill","fillOpacity","stroke","strokeWidth","dataKey","contrastColor","toGraphData","join","sort","MachineStatusMonitoringUpDownState","MachineStatusMonitoringBoolState","MachineStatusControlMeterState","ConstructionRecordCardList","sliceByLength","str","activeCardList","onClickCard","ConstructionRecordCardListContainer","machineOperationHistory","ConstructionRecordGraph","graphData","setGraphData","right","bottom","strokeDasharray","scale","domain","tickFormatter","unixTime","toLocaleDateString","interval","tick","wordWrap","angle","textAnchor","labelStyle","labelFormatter","formatter","entry","split","y","GradientLine","yAxisId","leftY","dx","orientation","rightY","animationEasing","animationDuration","dot","CustomizedDot","activeDot","CustomizedActiveDot","ConstructionRecordGraphContainer","graphDataSource","graphOption","csvLink","textDecoration","DownloadButton","m","isDisabled","filename","DownloadButtonContainer","MachineStatusMonitoringUtility","augerTotalTime1","toFindItem","DtoMachineDataType","AugerTotalTime1","augerTotalTime2","AugerTotalTime2","batteryVoltage","BatteryVoltage","bodyAngleX","BodyAngleX","bodyAngleY","BodyAngleY","craneTotalDistance","CraneTotalDistance","current1","Current1","current2","Current2","currentDepth","CurrentDepth","currentSpeed","CurrentSpeed","engineRotateSpeed","EngineRotateSpeed","engineTotalTime","EngineTotalTime","flowRate1","FlowRate1","flowRate2","FlowRate2","frontLeftJackPressure","FrontLeftJackPressure","frontRightJackPressure","FrontRightJackPressure","leaderAngleX","LeaderAngleX","leaderAngleY","LeaderAngleY","leftStayStrokeLength","LeftStayStrokeLength","loadCell","LoadCell","mainPumpTotalTime","MainPumpTotalTime","gearPumpTotalTime","GearPumpTotalTime","rearLeftJackPressure","RearLeftJackPressure","rearRightJackPressure","RearRightJackPressure","rightStayStrokeLength","RightStayStrokeLength","rotate1","Rotate1","rotate2","Rotate2","totalTime","TotalTime","upDownPressure","UpDownPressure","upDownSpeedVolume","UpDownSpeedVolume","version","Version","workingOilTemp","WorkingOilTemp","BatteryVoltageAvg","EngineRotationTimeAvg","LiftingPressureMax","OilTemperatureAvg","autoControlConnection","toBoolean","AutoControlConnection","ecuError","toBoolState","EcuError","emergencyStopState","EmergencyStopState","engineCoolingWaterOverHeat","EngineCoolingWaterOverHeat","faultLamp","FaultLamp","hookOverHoisting","HookOverHoisting","pilotPressureWarning","PilotPressureWarning","workingOilTempWarning","WorkingOilTempWarning","alarmBatteryVoltage","AlarmBatteryVoltage","upDownState","toUpDownState","UpDownState","workingOilTime","WorkingOilTime","engineOilTime","EngineOilTime","oilElementTime","OilElementTime","airElementTime","AirElementTime","fuelElementTime","FuelElementTime","workingOilElementTime","WorkingOilElementTime","batteryTime","BatteryTime","coolantTime","CoolantTime","fanBeltTime","FanBeltTime","alternatorTime","AlternatorTime","starterMotorTime","StarterMotorTime","oilPressurePumpCouplingTime","OilPressurePumpCouplingTime","oilPressurePumpDeceleratorOilTime","OilPressurePumpDeceleratorOilTime","winchDeceleratorOilTime","WinchDeceleratorOilTime","primaryHoistingWire","PrimaryHoistingWire","subHoistingWire","SubHoistingWire","upsAndDownsWire","UpsAndDownsWire","pendantRope","PendantRope","SelfInspection","toFindResetRequestItem","toResetRequestDateParameter","machineDataType","toMachineDataType","toMachineMaintenanceSettingResetHistoryListItem","NotAvailable","Stop","Up","Down","On","Off","DtoMachineStatus","Penetration","Depth","TipPullOut","TipHitBack","TipStir","PullOut","RePenePullOut","RePeneHitBack","Other","Reset","toResetRequestItem","toResetSubRequestType","resetAt","toDateTimeString","resetValue","lastUpdatedAtNull","MachineStatusMonitoringAdapter","toInput","toItem","machineStatus","toMachineStatus","createEditItemErrorResult","toMaintenanceSettingItemFromStatusItem","toClientRequestInput","addOrUpdateClientRequest","createMachineMaintenanceSettingErrorResult","toGetClientRequestInput","getClientRequest","toMaintenanceSettingItemFromResetRequestItem","toGetResetHistroyInput","getClientResetHistory","createMachineMaintenanceSettingResetHistoryErrorResult","toMachineMaintenanceSettingResetHistoryItem","MachineStatusMonitoringSlice","ControlMeterStatusCard","iconGreen","iconRed","iconBlue","info","iconGray","LiftingStatusCard","renderStatusIcon","ConnectionStatusCard","textContainer","MeasuredCard","measuredvalue","blinkState","animation","AlertParameterCard","renderAlertStatus","alignSelf","ParameterCard","CtuVersionInformation","IpAddressInformation","UpdateItem","buttonProps","box","gridContainer","gridHeader","MachineStatusMonitoringMain","sm","lg","justify","direction","md","MachineStatusMonitoringMainContainer","machineStatusMonitoring","createGenericSlice","MachineErrorHistoryUtility","occurredAt","detail","count","MachineErrorHistoryAdapter","listItems","graphItems","MachineErrorHistorySlice","AlertRecordMain","AleartRecordSearch","AlertRecordSearchContainer","AlertRecordSearch","AlertRecordTable","AlertRecordTableContainer","tableDataSource","machineErrorHistory","AlertRecordGraph","barGap","barSize","maxBarSize","dy","allowDecimals","cursor","AlertRecordGraphUtility","AlertRecordGraphContainer","DailyInspectionRecordUtility","DailyInspectionRecordAdapter","DailyInspectionRecordSlice","onGetDailyReportAsync","onUpdateDailyInspectedStampAsync","DailyInspectionRecordTable","DailyInspectionRecordTableContainer","dailyInspectionRecord","DailyInspectionSearch","DailyInspectionSearchContainer","convertDailyListItem","toUpdateDailyInspectedStampItem","WeeklyInspectionRecordUtility","WeeklyInspectionRecordAdapter","WeeklyInspectionRecordSlice","onGetWeeklyReportAsync","onUpdateWeeklyInspectedStampAsync","WeeklyInspectionRecordTable","WeeklyInspectionRecordTableContainer","weeklyInspectionRecord","WeeklyInspectionSearch","WeeklyInspectionSearchContainer","convertWeeklyListItem","toUpdateWeeklyInspectedStampItem","CompletionInspectionRecordUtility","CompletionInspectionRecordAdapter","CompletionInspectionRecordSlice","onGetCompletionReportAsync","onUpdateCompletionInspectedStampAsync","CompletionInspectionRecordTable","CompletionInspectionRecordTableContainer","completionInspectionRecord","CompletionInspectionSearch","CompletionInspectionSearchContainer","stampData","setChecked","convertCompletionInspectionListItem","inspectionStampItem","toUpdateCompletionInspectedStampItem","StatusEditSlice","getStatusResult","getClientRequestResult","getResetHistoryResult","isOpenEdit","isOpenHsitory","fetchEndStatusResult","fetchEndClientRequestResult","fetchEndResetHistoryResult","openEditDialog","openHistoryDialog","closeDialog","changeEditItem","editItem","getMachineMaintenanceSettingItemAsync","getClientRequestResultWaiter","getClientRequestAsync","statusResult","clientRequestResult","onUpdateAsync","checkPasswordAsync","checkPasswordResult","addOrUpdateClientRequestAsync","onUpdateClickAsync","EditCardContent","cardHeader","flexFlow","EditCardHeader","CardHeader","updateValue","onHistoryClick","onEditClick","EditCard","valueNormally","valueExcess","prefix","EditCardRemainsContent","renderExcessValue","renderNomallyValue","isFinite","convertToNumber","Math","abs","renderValue","EditCardRemains","StatusEditMain","onHisrotyClick","statusData","updateData","StatusEditMainContainer","statusEdit","onOpenEditDialog","onOpenHistoryDialog","MuiTextFieldUtility","LimitationInputNumber","allowMinus","Maximun","MinusNumericInputMaximum","NumericInputMaximum","Minimum","MinusNumericInputMinimum","NumericInputMinimum","currentValue","EditDialog","validate","setValidate","isShowPassword","setIsShowPassword","LimitationNumberAllowMinus","LimitationNumber","onValidateInputItem","valueError","hourMeterError","passError","isCalendar","isRequiredHrMeter","onSubmit","submitHandler","autoComplete","InputProps","disableFuture","required","helperText","inputProps","min","max","endAdornment","InputAdornment","preValue","onMouseDown","Visibility","VisibilityOff","onUpdate","isInputCalendar","itemType","EditDialogContainer","ctuType","validateMachineInfo","ResetHistoryTable","ResetHistoryTableContainer","toDataSource","useHistoryStyles","closeButton","HisrotyDialog","HistoryDialogContainer","getResetHistoryAsync","HistoryDialog","RecordPageTabItems","tabValue","constructionRecord","machineMaintenanceSetting","alertRecord","tab","content","overflowX","TabPageContentLayout","backButton","TabList","setPath","selectedTab","onBackLinkClick","flexItem","Tabs","onTabClick","indicatorColor","textColor","scrollButtons","isBaseMachine","Tab","ConstructionMachineMasterTab","useRouteMatch","useParams","OtherReportImageSearchType","ConstructionMachineMasterPage","OtherReportUtility","imagePaths","Reporter","With","Without","OtherReportAdapter","toIsSavedImage","imageSearchType","OtherReportSlice","getDocumentResult","placement","OtherReportTable","onClickShowModal","OtherReportTableContainer","OtherReportSearch","imageTypeRadioButton","OtherReportSearchContainer","ReportImageGallery","original","thumbnail","showBullets","showPlayButton","showIndex","thumbnailPosition","useBrowserFullscreen","disableThumbnailScroll","itemColumn","ReportDetailDialog","dividers","onDwonloadClick","JSZip","require","ReportDetailDialogContainer","onDownloadClick","downloadImagesAsync","getImageDataAsync","imagePromises","i","blob","fileName","lastIndexOf","imgBlob","catch","folderName","nullData","imageData","generateImagesZipAsync","images","zip","image","file","generateAsync","encodeFileName","iconv","compression","compressionOptions","level","dlLink","document","createElement","dataUrl","URL","createObjectURL","download","insertAdjacentElement","click","remove","revokeObjectURL","OtherReportPage","ReportPage","createMasterGenericSlice","resetState","isSelected","onSelectedItem","clearSelectedItem","chageCreating","isCreating","getSelectBoxItem","selectBoxItem","isDialogOpen","updatePreviewReport","MaintenanceItemUtility","machineTypeItem","_","divisionList","divisionItem","maintenanceDivisionId","maintenanceDivisionName","toInputItem","MaintenanceItemAdapter","add","errorItem","update","MaintenanceItemMasterSlice","onExcuteAsync","promise","onConfirmRemoveAsync","removeAsync","MasterTableOptions","MasterTableFrame","MaintenenceItemResultTable","MaintenanceItemResultTableContainer","maintenanceItemMaster","MaintenanceItemResultTable","light","MuiCreateButton","MuiPreviewButton","drawer","drawerPaper","radioGroupButton","MaintenancePreviewDrawer","selectedType","setSelectedType","setIsOpen","classList","FormLabel","onClickPreview","buttonGroup","MaintenanceItemSearchCondition","selectData","setSelectData","select","SelectProps","MenuProps","option","maintenanceDivisionList","machineTypeList","onClickSearch","onClickCreate","MaintenanceItemSearchConditionContainer","getMaintenancePreviewReportAsync","MuiAddButton","MuiRemoveButton","updateBox","MasterDetailButtonGroup","onClickAdd","onClickCancel","isNonEditabled","onClickUpdate","onClickRemove","deleteButton","updateButton","rowContainer","textarea","MaintenanceItemDetailCondition","initialValues","onChangeSelectBox","validateError","maintenanceDivision","maintenanceItem","multiline","rows","MaintenanceItemDetailConditionContainer","clearValidate","addAsync","updateAsync","ConfirmDialog","setInputItem","onRemoveClick","onRemove","ConfirmDialogContainer","pwassword","boxBuleIn","transitions","easing","easeIn","boxYellowIn","MasterLayout","isExpandedSearch","isExpandedTable","isExpandedDetail","expanded","collapsedHeight","MaintenanceItemPage","machineTypeWaiter","getMachineTypeAsync","maintenanceDivisionWaiter","getMaintenanceDivisionAsync","selectBoxresult","machineTypeResult","maintenanceDivisionResult","MaintenanceDivisionUtility","typeItem","MaintenanceDivisionAdapter","MaintenanceDivisionSlice","MaintenanceDivisionResultTable","MaintenanceDivisionResultTableContainer","maintenanceDivisionMaster","MaintenanceDivisionSearchCondition","MaintenanceDivisionSearchConditionContainer","MaintenanceDivisionDetailCondition","MaintenanceDivisionDetailConditionContainer","MaintenanceDivisioinPage","MachineUtility","modelItem","manufacturerItem","ctuItem","mainteCtuItem","MaintenanceCtuId","toYearMonthString","connectedCtuText","toConectedCtuText","fromConectedCtu","MachineAdapter","MachineMasterSlice","MachineResultTable","MachineResultTableContainer","machineMaster","MachineSearchCondition","selctedTypeId","checkSelectedBaseMachine","toMachineType","typeList","modelList","manufacturerList","views","openTo","setDate","MachineSearchConditionContainer","ctuIdList","maintenanceCtuIdList","inputRadio","MachineDetailCondition","onChangeDate","MachineDetailConditionContainer","toConnectedCtu","MachinePage","modelWaiter","getModelAsync","manufacturerWaiter","getManufacturerAsync","ctuWaiter","getCtuAsync","modelResult","manufacturerResult","ctuResult","InspectionDivisionUtility","groupItem","InspectionDivisionAdapter","InspectionDivisionSlice","InspectionDivisionResultTable","InspectionDivisionResultTableContainer","inspectionDivisionMaster","Daily","Weekly","Completion","InspectionPreviewDrawer","InspectionDivisionSearchCondition","groupList","InspectionDivisionSearchConditionContainer","getIncspectionPreviewReportAsync","InspectionDivisionDetailCondition","inspectionGroup","inspectionDivision","InspectionDivisionDetailConditionContainer","InspectionDivisionPage","getInspectionGroupAsync","inspectionGroupResult","InspectionItemUtility","inspectionDivisionId","inspectionDivisionName","inspectionGroupId","inspectionGroupName","InspectionItemAdapter","InspectionItemMasterSlice","InspectionItemResultTable","InspectionItemResultTableContainer","inspectionItemMaster","InspectionItemSearchCondition","inspectionDivisionList","inspectionGroupList","InspectionItemSearchConditionContainer","InspectionItemDetailCondition","inspectionItem","InspectionItemDetailConditionContainer","InspectionItemPage","inspectionGroupWaiter","inspectionDivisionWaiter","getInspectionDivisionAsync","inspectionDivisionResult","ModelUtility","ModelAdapter","ModelMasterSlice","MachineModelResultTable","MachineModelResultTableContainer","modelMaster","MachineModelSearchCondition","MachineModelSearchConditionConTainer","ModelDetailCondition","ModelDetailConditionContainer","MachineModelPage","ManufacturerUtility","ManufacturerAdapter","ManufacturerMasterSlice","ManufacturerResultTable","ManufacturerResultTableContainer","manufacturerMaster","ManufacturerSearchCondition","ManufacturerSearchConditionContainer","ManufacturerDetailCondition","ManufacturerDetailConditionContainer","ManufacturerPage","MethodUtility","MethodAdapter","MethodMasterSlice","MethodResultTable","MethodResultTableContainer","methodMaster","MathodSearchCondition","MethodSearchConditionContainer","MethodSearchCondition","MethodDetailCondition","MethodDetailConditionContainer","MethodPage","UserUtility","UserAdapter","UserMasterSlice","toggleSingoutDialog","isAuthorized","green","SigninUserTag","UserResultTable","userItem","UserResultTableContainer","userMaster","UserSearchCondition","UserSearchConditionContainer","UserDetailCondition","handleClickShowPassword","handleMouseDownPassword","isSigninUser","confirmPassword","UserDetailConditionContainer","signinUser","checkSignInUser","authorized","isAuthirozed","SignoutDialog","disableEscapeKeyDown","SingoutDialogContainer","UserPage","RemarksUtility","RemarksAdapter","RemarksMasterSlice","RemarksResultTable","RemarksResultTableContainer","remarksMaster","RemarksSearchCondition","RemarksSearchConditionContainer","RemarksDetailCondition","RemarksDetailConditionContainer","RemarksPage","MasterPageTabItems","masterRemarksItem","MasterTab","MasterPage","SigninSlice","isSignedIn","getStorageIsSignedIn","setIsSignedIn","onSigninAsync","signInAsync","setStorageIsSignedIn","form","submit","SigninForm","idError","LogoFudo","LogoST","onSigninClick","onSignin","noValidate","startAdornment","AccountCircle","Lock","SigninFormContainer","onSigninClickAsync","SigninPage","signin","to","AccountPage","FileListType","Pdf","HomeDirectoryType","Document","OnlineHelp","FileManageUtility","endsWith","substr","directoryItem","home","sub","directoryNames","shift","rootDirectory","ret","localeCompare","sensitivity","pos","allowExts","ext","getExt","toLowerCase","fileSize","isStdByte","decimal","thisSize","isInteger","stdByte","fileUnit","unitIndex","sizeTemp","round","Body","Response","asStream","objectUrl","appendChild","removeChild","extension","pop","Contents","CommonPrefixes","Prefix","lastModified","isOnelineHelpRoot","temp","SortingListFiles","concat","Key","checkExt","getFileType","LastModified","ag2fileSizeOpt","Size","toLocaleLowerCase","directoryName","code","Code","Message","versionId","VersionId","successItems","margeResultItems","errorItems","Map","removeTrailingSlash","onlineHelpList","FileManageAdapter","_client","REGION","IDENTITY_POOL_ID","BUCKET_NAME","S3Client","region","fromCognitoIdentityPool","CognitoIdentityClient","identityPoolId","isResultError","Errors","toSuccessFileItem","Deleted","toErrorFileItem","validateS3GetRequest","command","ListObjectsCommand","Bucket","addTrailingSlash","Delimiter","send","GetObjectCommand","asBlob","PutObjectCommand","ContentType","files","fileInfo","putFileAsync","results","dirInfo","sendPutObjectAsync","keys","deletePromises","deleteFoldersAsync","margeResult","getListFilesAsync","getRes","msg","getListError","deleteFilesAsync","folders","folder","deleteFilesRes","objects","DeleteObjectsCommand","Objects","createDeleteResult","FileManageSlice","selectedRowItems","isOpenUploadDialog","isOpenCreateFolderDialog","isOpenDeleteDialog","isOpenDeleteResultDialog","isOpenUploadResultDialog","getFileListResult","getFileResult","putResult","deleteResult","selectedRows","toggleUploadDialog","toggleUploadResultDialog","toggleCreateFolderDialog","toggleDeleteDialog","toggleDeleteResultDialog","onGetListFilesAsync","dirItem","toDirItem","onPutDirectoryAsync","putDirectoryAsync","onPutFilesAsync","putFilesAsync","onDeleteFilesAsync","deleteObjectsAsync","ControlButtons","isDisabledUpload","CreateNewFolder","isDisabledCreate","isDisabledDelete","ControlButtonsContainer","CreateFolderDialog","nameError","test","onCreateClick","onOkClick","CreateFolderDialogContainer","toDirectoryKey","HomeDirTypeToggle","HomeDirTypeToggleContainer","homeType","DeleteDialogContainer","selectedItems","FileTypeIcon","FolderOutlined","PictureAsPdf","InsertDriveFileOutlined","S3FileTable","tableRef","onClickLink","titleComponent","showTitle","enableSorting","selection","selectionProps","toolbarButtonAlignment","onSelectionChange","S3Breadcrumbs","Breadcrumbs","separator","NavigateNext","onClickBreadcrumb","S3FileTableContainer","isOnlineHelpRoot","useCallback","getFileAsync","resp","downloadBlobObject","onClickFolderLink","dropzone","dropzoneIcon","newFile","updateFile","baseStyle","flex","outline","transition","acceptStyle","rejectStyle","UploadDialog","uploadFiles","setUploadFiles","onDropAccepted","acceptedFiles","prevState","fileIndex","findIndex","valIndex","valSelf","splice","useDropzone","noClick","noKeyboard","accept","maxSize","multiple","getRootProps","getInputProps","isDragAccept","isDragReject","useMemo","removeFile","newFiles","removeAllFiles","renderFileList","Table","TableBody","isUpdate","fileList","TableRow","hover","TableCell","NoteAddOutlined","scope","Cancel","DialogContentText","CloudUploadOutlined","TableContainer","onClickUpload","UploadDialogContainer","f","alert","TableOptions","successedTableColumn","failedTableColumn","wordBreak","UploadResultDialog","tableStyle","Alert","AlertTitle","failedDataSource","successedDataSource","my","mb","UploadResultDialogContainer","DeleteResultDialog","DeleteResultDialogContainer","Image","FileManagePage","UploadPage","commonTheme","MuiTextField","MuiButton","typography","textTransform","overrides","MuiTableHead","MuiTableRow","MuiTableCell","head","MuiCardContent","MuiFormLabel","asterisk","defaultTheme","createMuiTheme","default","colorSecondary","MuiPickersToolbar","teal","MuiPickersCalendarHeader","switchHeader","MuiPickersYear","yearSelected","yearDisabled","MuiPickersMonth","monthSelected","monthDisabled","MuiPickersDay","day","daySelected","dayDisabled","darkTheme","MuiLink","ThemeUtility","ThemeFrame","ThemeProvider","selectTheme","CssBaseline","StyledLinearProgress","withStyles","colorPrimary","bar","LinearProgress","AuthorizeLoading","AuthorizeError","onReturnClick","AuthorizePage","isSigednin","AuthorizeRouter","funcAsync","getAuthenticatedUserAsync","onReturnClickAsync","App","utils","jaLocale","exact","isLocalhost","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","combinedReducer","combineReducers","reducer","store","configureStore","middleware","getDefaultMiddleware","devTools","process","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename","origin","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.a272dbab.chunk.js","sourcesContent":["import DateFnsUtils from '@date-io/date-fns';\r\nimport format from 'date-fns/format';\r\n\r\n/**\r\n * `Date-Fns` 関連の 拡張したユーティリティ機能のを提供します。\r\n */\r\nexport class ExtendedDateFnsUtils extends DateFnsUtils {\r\n\r\n /**\r\n * カレンダーのヘッダー部分の表示文字列を取得します\r\n * @param {any} date\r\n */\r\n getCalendarHeaderText(date: Date): string {\r\n return format(date, \"yyyy MMM\", { locale: this.locale });\r\n }\r\n\r\n /**\r\n * 日付ピッカーのヘッダー部分の表示文字列を取得します\r\n * @param {any} date\r\n */\r\n getDatePickerHeaderText(date: Date): string {\r\n return format(date, \"MMM d日\", { locale: this.locale });\r\n }\r\n}\r\n","/**\r\n * `CreateSlice` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class CreateSliceUtility {\r\n //#region フィールド\r\n\r\n /** 通信失敗時のデフォルトのメッセージを表します。 */\r\n public static readonly DefualtErrorMessage = \"通信エラーが発生しました\";\r\n\r\n /** 通信成功時のデフォルトメッセージを表します。*/\r\n public static readonly DefualtSuccessMessage = \"通信が完了しました\";\r\n\r\n //#endregion フィールド\r\n\r\n}\r\n","// redux\r\nimport { createSlice, SliceCaseReducers, ValidateSliceCaseReducers, PayloadAction } from '@reduxjs/toolkit';\r\n// component\r\nimport { Message } from '../../../components/MuiSnackbar/types';\r\nimport { CreateSliceUtility } from './create-slice-utility'\r\n\r\n/** ジェネリック型 State のインターフェースを提供します。 */\r\nexport interface ExtendGenericState {\r\n // 結果情報を表します。\r\n result: T,\r\n // アイテム情報を表します。\r\n item: U,\r\n // ロード中かどうかを表します。\r\n isLoading: boolean,\r\n // メッセージを表示するかどうかを表します。\r\n isShowMessage: boolean,\r\n // メッセージを表します。\r\n message?: Message,\r\n}\r\n\r\n/**\r\n * slice オブジェクトを作成します。\r\n * @param name A string name for this slice of state. Generated action type constants will use this as a prefix.\r\n * @param initialState The initial state value for this slice of state.\r\n * @param reducers An object containing Redux \"case reducer\" functions (functions intended to handle a specific action type, equivalent to a single case statement in a switch).\r\n */\r\nexport const createExtendGenericSlice = >>\r\n ({\r\n name = '',\r\n initialState,\r\n reducers\r\n }: {\r\n name: string\r\n initialState: ExtendGenericState\r\n reducers: ValidateSliceCaseReducers, Reducers>\r\n }) => {\r\n return createSlice({\r\n name,\r\n initialState,\r\n reducers: {\r\n\r\n /**\r\n * 通信開始処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchStart(state) {\r\n state.isLoading = true;\r\n state.isShowMessage = false;\r\n state.message = void 0;\r\n },\r\n\r\n /**\r\n * If you want to write to values of the state that depend on the generic\r\n * (in this case: `state.data`, which is T), you might need to specify the\r\n * State type manually here, as it defaults to `Draft>`,\r\n * which can sometimes be problematic with yet-unresolved generics.\r\n * This is a general problem when working with immer's Draft type and generics.\r\n */\r\n /**\r\n * 通信成功時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchSuccess(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result = action.payload;\r\n },\r\n\r\n /**\r\n * 通信失敗処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchFailure(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result = action.payload;\r\n },\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n */\r\n fetchEnd(state) {\r\n state.isLoading = false;\r\n },\r\n\r\n /**\r\n * メッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = action.payload;\r\n },\r\n\r\n /**\r\n * 通信成功時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showSuccessMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"success\",\r\n text: action.payload ?? CreateSliceUtility.DefualtSuccessMessage,\r\n }\r\n },\r\n\r\n /**\r\n * 通信失敗時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showErrorMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"error\",\r\n text: `Error : ${action.payload ?? CreateSliceUtility.DefualtErrorMessage}`,\r\n }\r\n },\r\n\r\n /**\r\n * メッセージの非表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n hideMessage(state) {\r\n state.isShowMessage = false;\r\n },\r\n\r\n /**\r\n * アイテムの更新を行います。\r\n * @param state\r\n * @param action\r\n */\r\n updateItem(state: ExtendGenericState, action: PayloadAction) {\r\n state.item = action.payload;\r\n\r\n },\r\n\r\n /**\r\n * アイテムの更新を行います。\r\n * @param state\r\n * @param action\r\n */\r\n updateItemPartial(state: ExtendGenericState, action: PayloadAction>) {\r\n state.item = { ...state.item, ...action.payload };\r\n },\r\n\r\n ...reducers\r\n }\r\n })\r\n}\r\n","/* tslint:disable */\n/* eslint-disable */\n//----------------------\n// \n// Generated using the NSwag toolchain v13.2.3.0 (NJsonSchema v10.1.5.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\n// \n//----------------------\n// ReSharper disable InconsistentNaming\n\nexport abstract class WebApiClient {\n/**\n * `Web API` を公開するサーバーと `HTTP` 通信する基本機能を提供します。\n */\n\n //#region フィールド\n\n /** `CSRF` (Cross-Site Request Forgery) 対策のトークンを格納する要求ヘッダーの名称を表します。 */\n private static readonly _antiForgeryHeaderName = \"RequestVerificationToken\";\n /** `CSRF` (Cross-Site Request Forgery) 対策のトークンを格納する要素の名称を表します。 */\n private static readonly _antiForgeryFormFieldName = `__${WebApiClient._antiForgeryHeaderName}`;\n /** `CSRF` (Cross-Site Request Forgery) 対策のトークンを格納するローカルストレージキーを表します。 */\n public static readonly antiForgeryLocalStorageKey = `${WebApiClient._antiForgeryHeaderName}`;\n /** `HTTP` 通信を取り消す通知を配信する既定のオブジェクトを表します。 */\n //private static readonly _defaultCancellationToken = UE.CancellationToken.none;\n\n /** `HTTP` 通信を取り消す通知を配信するオブジェクトを表します。 */\n //private _cancellationToken = WebApiClient._defaultCancellationToken;\n\n //#endregion フィールド\n\n //#region メソッド\n\n /**\n * `HTTP` 通信を取り消す通知を配信するオブジェクトを設定します。\n *\n * @param cancellationToken `HTTP` 通信を取り消す通知を配信するオブジェクトを指定します。\n */\n //public setCancellationToken(cancellationToken: UE.CancellationToken): void {\n // this._cancellationToken = UE.Core.elvis(cancellationToken, WebApiClient._defaultCancellationToken);\n //}\n\n /**\n * 要求情報を変換します。\n *\n * @param options 要求に適用する設定情報を指定します。\n * @returns 非同期操作を返します。\n */\n // tslint:disable-next-line: async-suffix-requires\n protected transformOptions(options: RequestInit): Promise {\n // 取り消し処理を登録する\n //const cancellationToken = UE.Core.elvis(this._cancellationToken, WebApiClient._defaultCancellationToken);\n //if (cancellationToken !== WebApiClient._defaultCancellationToken) {\n // const abortController = new AbortController();\n // cancellationToken.register(() => abortController.abort());\n // options.signal = abortController.signal;\n // this.setCancellationToken(WebApiClient._defaultCancellationToken);\n //}\n\n // ローカルストレージからから `CSRF` トークンを取得\n const token = localStorage.getItem(WebApiClient.antiForgeryLocalStorageKey)\n if (token == null) {\n return Promise.resolve(options);\n }\n // 同じドメインなら要求を送る (※ 現状、ほかのドメインは考慮しない)\n options.credentials = \"same-origin\";\n // 要求ヘッダーに `CSRF` トークンを設定する\n const headers = (options.headers == null ? {} : options.headers) as { [key: string]: string };\n headers[WebApiClient._antiForgeryHeaderName] = token;\n options.headers = headers;\n return Promise.resolve(options);\n }\n\n /**\n * 応答情報を変換します。\n *\n * @param _url `HTTP` の要求 `URL` を指定します。\n * @param response 応答情報を指定します。\n * @param func 応答情報を使用する処理を指定します。\n * @returns 非同期操作を返します。\n */\n // tslint:disable-next-line: async-suffix-requires\n protected transformResult(_url: string, response: Response, func: (value: Response) => Promise): Promise {\n return func(response);\n }\n\n //#endregion メソッド\n}\n\nexport interface ISharedClient {\n /**\n * 型式一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getModel(): Promise;\n /**\n * メーカー一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getManufacturer(): Promise;\n /**\n * 施工機種別一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMachineType(): Promise;\n /**\n * 整備区分一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenanceDivision(): Promise;\n /**\n * 点検グループ一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getInspectionGroup(): Promise;\n /**\n * 点検区分一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getInspectionDivision(): Promise;\n /**\n * CTU 一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCtu(): Promise;\n /**\n * 施工機エラー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMachineError(input: GetMachineErrorInput): Promise;\n /**\n * 全施工機エラー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getAllMachineError(): Promise;\n /**\n * ユーザーパスワードを非同期でチェックします。\n * @return 結果を戻す非同期操作を返します。\n */\n checkPassword(input: CheckPasswordInput): Promise;\n /**\n * 認証済のユーザー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getAuthenticatedUser(): Promise;\n}\n\nexport class SharedClient extends WebApiClient implements ISharedClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 型式一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getModel(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetModel\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetModel(_response));\n });\n }\n\n protected processGetModel(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetModelOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * メーカー一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getManufacturer(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetManufacturer\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetManufacturer(_response));\n });\n }\n\n protected processGetManufacturer(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetManufacturerOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 施工機種別一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMachineType(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetMachineType\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMachineType(_response));\n });\n }\n\n protected processGetMachineType(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMachineTypeOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備区分一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenanceDivision(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetMaintenanceDivision\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMaintenanceDivision(_response));\n });\n }\n\n protected processGetMaintenanceDivision(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMaintenanceDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 点検グループ一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getInspectionGroup(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetInspectionGroup\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetInspectionGroup(_response));\n });\n }\n\n protected processGetInspectionGroup(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetInspectionGroupOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 点検区分一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getInspectionDivision(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetInspectionDivision\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetInspectionDivision(_response));\n });\n }\n\n protected processGetInspectionDivision(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetInspectionDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * CTU 一覧情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCtu(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetCtu\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCtu(_response));\n });\n }\n\n protected processGetCtu(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetCtuOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 施工機エラー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMachineError(input: GetMachineErrorInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetMachineError\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMachineError(_response));\n });\n }\n\n protected processGetMachineError(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMachineErrorOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 全施工機エラー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getAllMachineError(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetAllMachineError\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetAllMachineError(_response));\n });\n }\n\n protected processGetAllMachineError(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetAllMachineErrorOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * ユーザーパスワードを非同期でチェックします。\n * @return 結果を戻す非同期操作を返します。\n */\n checkPassword(input: CheckPasswordInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/CheckPassword\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processCheckPassword(_response));\n });\n }\n\n protected processCheckPassword(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = CheckPasswordOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 認証済のユーザー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getAuthenticatedUser(): Promise {\n let url_ = this.baseUrl + \"/api/web/Shared/GetAuthenticatedUser\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetAuthenticatedUser(_response));\n });\n }\n\n protected processGetAuthenticatedUser(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetAuthenticatedUserOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IOtherReportClient {\n /**\n * その他報告の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetOtherReportInput): Promise;\n}\n\nexport class OtherReportClient extends WebApiClient implements IOtherReportClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * その他報告の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetOtherReportInput): Promise {\n let url_ = this.baseUrl + \"/api/web/OtherReport/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetOtherReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IReportClient {\n /**\n * 日常点検の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDailyReport(input: GetDailyReportInput): Promise;\n /**\n * 週間月例点検の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getWeeklyReport(input: GetWeeklyReportInput): Promise;\n /**\n * 現場完了点検の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCompletionReport(input: GetCompletionReportInput): Promise;\n /**\n * 整備記録の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenanceReport(input: GetMaintenanceReportInput): Promise;\n /**\n * 日常点検の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDailyPreviewReport(): Promise;\n /**\n * 週間月例点検の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getWeeklyPreviewReport(): Promise;\n /**\n * 現場完了点検の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCompletionPreviewReport(): Promise;\n /**\n * 整備記録の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenancePreviewReport(input: GetMaintenancePreviewReportInput): Promise;\n /**\n * 日常点検の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateDailyInspectedStamp(input: UpdateDailyInspectedStampInput): Promise;\n /**\n * 週間月例点検の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateWeeklyInspectedStamp(input: UpdateWeeklyInspectedStampInput): Promise;\n /**\n * 現場完了点検の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateCompletionInspectedStamp(input: UpdateCompletionInspectedStampInput): Promise;\n /**\n * 整備の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateMaintenanceInspectedStamp(input: UpdateMaintenanceInspectedStampInput): Promise;\n}\n\nexport class ReportClient extends WebApiClient implements IReportClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 日常点検の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDailyReport(input: GetDailyReportInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetDailyReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetDailyReport(_response));\n });\n }\n\n protected processGetDailyReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetDailyReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 週間月例点検の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getWeeklyReport(input: GetWeeklyReportInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetWeeklyReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetWeeklyReport(_response));\n });\n }\n\n protected processGetWeeklyReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetWeeklyReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 現場完了点検の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCompletionReport(input: GetCompletionReportInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetCompletionReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCompletionReport(_response));\n });\n }\n\n protected processGetCompletionReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetCompletionReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備記録の帳票の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenanceReport(input: GetMaintenanceReportInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetMaintenanceReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMaintenanceReport(_response));\n });\n }\n\n protected processGetMaintenanceReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMaintenanceReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 日常点検の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDailyPreviewReport(): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetDailyPreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetDailyPreviewReport(_response));\n });\n }\n\n protected processGetDailyPreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetDailyReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 週間月例点検の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getWeeklyPreviewReport(): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetWeeklyPreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetWeeklyPreviewReport(_response));\n });\n }\n\n protected processGetWeeklyPreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetWeeklyReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 現場完了点検の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCompletionPreviewReport(): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetCompletionPreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCompletionPreviewReport(_response));\n });\n }\n\n protected processGetCompletionPreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetCompletionReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備記録の帳票プレビュー情報を非同期で取得します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenancePreviewReport(input: GetMaintenancePreviewReportInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/GetMaintenancePreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMaintenancePreviewReport(_response));\n });\n }\n\n protected processGetMaintenancePreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMaintenanceReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 日常点検の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateDailyInspectedStamp(input: UpdateDailyInspectedStampInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/UpdateDailyInspectedStamp\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateDailyInspectedStamp(_response));\n });\n }\n\n protected processUpdateDailyInspectedStamp(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UpdateDailyInspectedStampOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 週間月例点検の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateWeeklyInspectedStamp(input: UpdateWeeklyInspectedStampInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/UpdateWeeklyInspectedStamp\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateWeeklyInspectedStamp(_response));\n });\n }\n\n protected processUpdateWeeklyInspectedStamp(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UpdateWeeklyInspectedStampOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 現場完了点検の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateCompletionInspectedStamp(input: UpdateCompletionInspectedStampInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/UpdateCompletionInspectedStamp\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateCompletionInspectedStamp(_response));\n });\n }\n\n protected processUpdateCompletionInspectedStamp(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UpdateCompletionInspectedStampOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備の検印の情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateMaintenanceInspectedStamp(input: UpdateMaintenanceInspectedStampInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Report/UpdateMaintenanceInspectedStamp\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateMaintenanceInspectedStamp(_response));\n });\n }\n\n protected processUpdateMaintenanceInspectedStamp(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UpdateMaintenanceInspectedStampOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IInspectionDivisionClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: InspectionDivisionInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: InspectionDivisionInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: InspectionDivisionInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: InspectionDivisionInput): Promise;\n}\n\nexport class InspectionDivisionClient extends WebApiClient implements IInspectionDivisionClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: InspectionDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionDivision/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: InspectionDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionDivision/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: InspectionDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionDivision/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: InspectionDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionDivision/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IInspectionItemClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: InspectionItemInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: InspectionItemInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: InspectionItemInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: InspectionItemInput): Promise;\n}\n\nexport class InspectionItemClient extends WebApiClient implements IInspectionItemClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: InspectionItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionItem/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: InspectionItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionItem/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: InspectionItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionItem/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: InspectionItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/InspectionItem/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = InspectionItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMachineClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MachineInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MachineInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MachineInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MachineInput): Promise;\n}\n\nexport class MachineClient extends WebApiClient implements IMachineClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MachineInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Machine/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MachineOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MachineInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Machine/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MachineOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MachineInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Machine/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MachineOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MachineInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Machine/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MachineOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMaintenanceDivisionClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MaintenanceDivisionInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MaintenanceDivisionInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MaintenanceDivisionInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MaintenanceDivisionInput): Promise;\n}\n\nexport class MaintenanceDivisionClient extends WebApiClient implements IMaintenanceDivisionClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MaintenanceDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceDivision/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MaintenanceDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceDivision/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MaintenanceDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceDivision/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MaintenanceDivisionInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceDivision/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceDivisionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMaintenanceItemClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MaintenanceItemInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MaintenanceItemInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MaintenanceItemInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MaintenanceItemInput): Promise;\n}\n\nexport class MaintenanceItemClient extends WebApiClient implements IMaintenanceItemClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MaintenanceItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceItem/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MaintenanceItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceItem/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MaintenanceItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceItem/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MaintenanceItemInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceItem/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MaintenanceItemOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IManufacturerClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: ManufacturerInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: ManufacturerInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: ManufacturerInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: ManufacturerInput): Promise;\n}\n\nexport class ManufacturerClient extends WebApiClient implements IManufacturerClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: ManufacturerInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Manufacturer/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ManufacturerOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: ManufacturerInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Manufacturer/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ManufacturerOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: ManufacturerInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Manufacturer/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ManufacturerOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: ManufacturerInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Manufacturer/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ManufacturerOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMethodClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MethodInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MethodInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MethodInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MethodInput): Promise;\n}\n\nexport class MethodClient extends WebApiClient implements IMethodClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: MethodInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Method/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MethodOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: MethodInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Method/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MethodOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: MethodInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Method/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MethodOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: MethodInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Method/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = MethodOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IModelClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: ModelInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: ModelInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: ModelInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: ModelInput): Promise;\n}\n\nexport class ModelClient extends WebApiClient implements IModelClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: ModelInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Model/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ModelOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: ModelInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Model/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ModelOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: ModelInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Model/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ModelOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: ModelInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Model/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = ModelOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IRemarksClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: RemarksInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: RemarksInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: RemarksInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: RemarksInput): Promise;\n}\n\nexport class RemarksClient extends WebApiClient implements IRemarksClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: RemarksInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Remarks/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = RemarksOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: RemarksInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Remarks/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = RemarksOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: RemarksInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Remarks/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = RemarksOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: RemarksInput): Promise {\n let url_ = this.baseUrl + \"/api/web/Remarks/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = RemarksOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IUserClient {\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: UserInput): Promise;\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: UserInput): Promise;\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: UserInput): Promise;\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: UserInput): Promise;\n}\n\nexport class UserClient extends WebApiClient implements IUserClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 対象のマスタの情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: UserInput): Promise {\n let url_ = this.baseUrl + \"/api/web/User/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UserOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で追加します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n add(input: UserInput): Promise {\n let url_ = this.baseUrl + \"/api/web/User/Add\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAdd(_response));\n });\n }\n\n protected processAdd(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UserOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n update(input: UserInput): Promise {\n let url_ = this.baseUrl + \"/api/web/User/Update\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdate(_response));\n });\n }\n\n protected processUpdate(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UserOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 対象のマスタの情報を非同期で削除します。\n * @param input 入力情報を指定します。\n * @return 非同期操作を返します。\n */\n remove(input: UserInput): Promise {\n let url_ = this.baseUrl + \"/api/web/User/Remove\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processRemove(_response));\n });\n }\n\n protected processRemove(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UserOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface ICompletionInspectionRecordClient {\n /**\n * 現場完了点検記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetCompletionInspectionRecordInput): Promise;\n}\n\nexport class CompletionInspectionRecordClient extends WebApiClient implements ICompletionInspectionRecordClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 現場完了点検記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetCompletionInspectionRecordInput): Promise {\n let url_ = this.baseUrl + \"/api/web/CompletionInspectionRecord/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetCompletionInspectionRecordOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IDailyInspectionRecordClient {\n /**\n * 日常点検記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetDailyInspectionRecordInput): Promise;\n}\n\nexport class DailyInspectionRecordClient extends WebApiClient implements IDailyInspectionRecordClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 日常点検記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetDailyInspectionRecordInput): Promise {\n let url_ = this.baseUrl + \"/api/web/DailyInspectionRecord/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetDailyInspectionRecordOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMachineErrorHistoryClient {\n /**\n * 施工機エラー履歴の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineErrorHistoryInput): Promise;\n}\n\nexport class MachineErrorHistoryClient extends WebApiClient implements IMachineErrorHistoryClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 施工機エラー履歴の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineErrorHistoryInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineErrorHistory/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMachineErrorHistoryOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMachineMonitoringClient {\n /**\n * 施工機モニタ―の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineMonitoringInput): Promise;\n /**\n * 施工機を非同期でアンロックします。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n unlock(input: UnlockMachineMonitoringInput): Promise;\n}\n\nexport class MachineMonitoringClient extends WebApiClient implements IMachineMonitoringClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 施工機モニタ―の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineMonitoringInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineMonitoring/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMachineMonitoringOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 施工機を非同期でアンロックします。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n unlock(input: UnlockMachineMonitoringInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineMonitoring/Unlock\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUnlock(_response));\n });\n }\n\n protected processUnlock(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UnlockMachineMonitoringOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMachineOperationHistoryClient {\n /**\n * 施工履歴の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineOperationHistoryInput): Promise;\n}\n\nexport class MachineOperationHistoryClient extends WebApiClient implements IMachineOperationHistoryClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 施工履歴の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineOperationHistoryInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineOperationHistory/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMachineOperationHistoryOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMachineStatusMonitoringClient {\n /**\n * 施工機モニタ―の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineStatusMonitoringInput): Promise;\n /**\n * 制御要求の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getClientRequest(input: GetClientRequestInput): Promise;\n /**\n * 制御要求の情報をを非同期で追加・更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n addOrUpdateClientRequest(input: AddOrUpdateClientRequestInput): Promise;\n /**\n * リセット履歴の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getClientResetHistory(input: GetResetHistroyInput): Promise;\n}\n\nexport class MachineStatusMonitoringClient extends WebApiClient implements IMachineStatusMonitoringClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 施工機モニタ―の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMachineStatusMonitoringInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineStatusMonitoring/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMachineStatusMonitoringOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 制御要求の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getClientRequest(input: GetClientRequestInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineStatusMonitoring/GetClientRequest\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetClientRequest(_response));\n });\n }\n\n protected processGetClientRequest(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetClientRequestOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 制御要求の情報をを非同期で追加・更新します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n addOrUpdateClientRequest(input: AddOrUpdateClientRequestInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineStatusMonitoring/AddOrUpdateClientRequest\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processAddOrUpdateClientRequest(_response));\n });\n }\n\n protected processAddOrUpdateClientRequest(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = AddOrUpdateClientRequestOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * リセット履歴の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getClientResetHistory(input: GetResetHistroyInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MachineStatusMonitoring/GetClientResetHistory\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetClientResetHistory(_response));\n });\n }\n\n protected processGetClientResetHistory(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetResetHistoryOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IMaintenanceRecordClient {\n /**\n * 整備記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMaintenanceRecordInput): Promise;\n}\n\nexport class MaintenanceRecordClient extends WebApiClient implements IMaintenanceRecordClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 整備記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetMaintenanceRecordInput): Promise {\n let url_ = this.baseUrl + \"/api/web/MaintenanceRecord/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMaintenanceRecordOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IWeeklyInspectionRecordClient {\n /**\n * 週間月例点検記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetWeeklyInspectionRecordInput): Promise;\n}\n\nexport class WeeklyInspectionRecordClient extends WebApiClient implements IWeeklyInspectionRecordClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * 週間月例点検記録の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n get(input: GetWeeklyInspectionRecordInput): Promise {\n let url_ = this.baseUrl + \"/api/web/WeeklyInspectionRecord/Get\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGet(_response));\n });\n }\n\n protected processGet(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetWeeklyInspectionRecordOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IAccountClient {\n /**\n * サインインします。\n * @param input 入力情報を指定します。\n * @param returnUrl (optional) 遷移先の URL を指定します。\n * @return アクションの結果を返します。\n */\n signIn(input: SignInInput, returnUrl: string | null | undefined): Promise;\n /**\n * トークンを取得します。\n * @return アクションの結果を返します。\n */\n getToken(): Promise;\n}\n\nexport class AccountClient extends WebApiClient implements IAccountClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * サインインします。\n * @param input 入力情報を指定します。\n * @param returnUrl (optional) 遷移先の URL を指定します。\n * @return アクションの結果を返します。\n */\n signIn(input: SignInInput, returnUrl: string | null | undefined): Promise {\n let url_ = this.baseUrl + \"/api/web/Account/SignIn?\";\n if (returnUrl !== undefined)\n url_ += \"returnUrl=\" + encodeURIComponent(\"\" + returnUrl) + \"&\"; \n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSignIn(_response));\n });\n }\n\n protected processSignIn(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SignInOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * トークンを取得します。\n * @return アクションの結果を返します。\n */\n getToken(): Promise {\n let url_ = this.baseUrl + \"/api/web/Account/GetToken\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetToken(_response));\n });\n }\n\n protected processGetToken(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetTokenOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface IApplicationClient {\n /**\n * バージョンを非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getVersion(input: GetVersionInput): Promise;\n /**\n * バージョンを非同期で更新します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateVersion(input: UpdateVersionInput): Promise;\n /**\n * アプリケーションの情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveApplicationData(input: SaveApplicationDataInput): Promise;\n /**\n * 日常点検の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveDailyInspection(input: SaveDailyInspectionInput): Promise;\n /**\n * 週間月例点検の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveWeeklyInspection(input: SaveWeeklyInspectionInput): Promise;\n /**\n * 現場完了時点検の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveCompletionInspection(input: SaveCompletionInspectionInput): Promise;\n /**\n * 整備の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMaintenance(input: SaveMaintenanceInput): Promise;\n /**\n * その他報告の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveOtherReport(input: SaveOtherReportInput): Promise;\n /**\n * 施工機ステータスの情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMachineStatus(input: SaveMachineStatusInput): Promise;\n /**\n * 施工機エラー履歴の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMachineErrorHistory(input: SaveMachineErrorHistoryInput): Promise;\n /**\n * ドキュメントを非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDocument(input: GetDocumentInput): Promise;\n /**\n * 整備記録を非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenance(input: GetMaintenanceInput): Promise;\n /**\n * 帳票情報を非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getReport(input: GetReportInput): Promise;\n /**\n * アップロードされたファイルを非同期で処理します。\n * @return 結果を戻す非同期操作を返します。\n */\n uploadFile(): Promise;\n /**\n * 制御要求情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getRequest(input: GetRequestInput): Promise;\n /**\n * 日常点検の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDailyInspectionPreviewReport(input: SaveDailyInspectionInput): Promise;\n /**\n * 週間月例点検の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getWeeklyInspectionPreviewReport(input: SaveWeeklyInspectionInput): Promise;\n /**\n * 現場完了点検の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCompletionInspectionPreviewReport(input: SaveCompletionInspectionInput): Promise;\n /**\n * 整備記録の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenancePreviewReport(input: SaveMaintenanceInput): Promise;\n /**\n * 施工機リセット履歴情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMachineResetHistory(input: SaveMachineResetHistoryInput): Promise;\n /**\n * CTU 保全の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCtuMaintenance(input: GetCtuMaintenanceInput): Promise;\n /**\n * CTU 保全の情報を非同期で保存します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveCtuMaintenance(input: SaveCtuMaintenanceInput): Promise;\n}\n\nexport class ApplicationClient extends WebApiClient implements IApplicationClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * バージョンを非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getVersion(input: GetVersionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetVersion\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetVersion(_response));\n });\n }\n\n protected processGetVersion(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetVersionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * バージョンを非同期で更新します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n updateVersion(input: UpdateVersionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/UpdateVersion\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUpdateVersion(_response));\n });\n }\n\n protected processUpdateVersion(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UpdateVersionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * アプリケーションの情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveApplicationData(input: SaveApplicationDataInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveApplicationData\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveApplicationData(_response));\n });\n }\n\n protected processSaveApplicationData(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveApplicationDataOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 日常点検の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveDailyInspection(input: SaveDailyInspectionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveDailyInspection\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveDailyInspection(_response));\n });\n }\n\n protected processSaveDailyInspection(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveDailyInspectionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 週間月例点検の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveWeeklyInspection(input: SaveWeeklyInspectionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveWeeklyInspection\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveWeeklyInspection(_response));\n });\n }\n\n protected processSaveWeeklyInspection(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveWeeklyInspectionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 現場完了時点検の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveCompletionInspection(input: SaveCompletionInspectionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveCompletionInspection\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveCompletionInspection(_response));\n });\n }\n\n protected processSaveCompletionInspection(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveCompletionInspectionOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMaintenance(input: SaveMaintenanceInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveMaintenance\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveMaintenance(_response));\n });\n }\n\n protected processSaveMaintenance(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveMaintenanceOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * その他報告の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveOtherReport(input: SaveOtherReportInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveOtherReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveOtherReport(_response));\n });\n }\n\n protected processSaveOtherReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveOtherReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 施工機ステータスの情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMachineStatus(input: SaveMachineStatusInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveMachineStatus\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveMachineStatus(_response));\n });\n }\n\n protected processSaveMachineStatus(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveMachineStatusOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 施工機エラー履歴の情報を非同期で保存します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMachineErrorHistory(input: SaveMachineErrorHistoryInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveMachineErrorHistory\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveMachineErrorHistory(_response));\n });\n }\n\n protected processSaveMachineErrorHistory(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveMachineErrorHistoryOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * ドキュメントを非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDocument(input: GetDocumentInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetDocument\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetDocument(_response));\n });\n }\n\n protected processGetDocument(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetDocumentOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備記録を非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenance(input: GetMaintenanceInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetMaintenance\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMaintenance(_response));\n });\n }\n\n protected processGetMaintenance(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMaintenanceOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 帳票情報を非同期で取得します。\n * @param input 入力値を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getReport(input: GetReportInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetReport(_response));\n });\n }\n\n protected processGetReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * アップロードされたファイルを非同期で処理します。\n * @return 結果を戻す非同期操作を返します。\n */\n uploadFile(): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/UploadFile\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n headers: {\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processUploadFile(_response));\n });\n }\n\n protected processUploadFile(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = UploadFileOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 制御要求情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getRequest(input: GetRequestInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetRequest\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetRequest(_response));\n });\n }\n\n protected processGetRequest(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetRequestOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 日常点検の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getDailyInspectionPreviewReport(input: SaveDailyInspectionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetDailyInspectionPreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetDailyInspectionPreviewReport(_response));\n });\n }\n\n protected processGetDailyInspectionPreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetDailyInspectionPreviewReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 週間月例点検の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getWeeklyInspectionPreviewReport(input: SaveWeeklyInspectionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetWeeklyInspectionPreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetWeeklyInspectionPreviewReport(_response));\n });\n }\n\n protected processGetWeeklyInspectionPreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetWeeklyInspectionPreviewReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 現場完了点検の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCompletionInspectionPreviewReport(input: SaveCompletionInspectionInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetCompletionInspectionPreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCompletionInspectionPreviewReport(_response));\n });\n }\n\n protected processGetCompletionInspectionPreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetCompletionInspectionPreviewReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 整備記録の帳票プレビュー情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getMaintenancePreviewReport(input: SaveMaintenanceInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetMaintenancePreviewReport\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMaintenancePreviewReport(_response));\n });\n }\n\n protected processGetMaintenancePreviewReport(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetMaintenancePreviewReportOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * 施工機リセット履歴情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveMachineResetHistory(input: SaveMachineResetHistoryInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveMachineResetHistory\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveMachineResetHistory(_response));\n });\n }\n\n protected processSaveMachineResetHistory(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveMachineResetHistoryOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * CTU 保全の情報を非同期で取得します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n getCtuMaintenance(input: GetCtuMaintenanceInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/GetCtuMaintenance\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGetCtuMaintenance(_response));\n });\n }\n\n protected processGetCtuMaintenance(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = GetCtuMaintenanceOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n\n /**\n * CTU 保全の情報を非同期で保存します。\n * @param input 入力情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n saveCtuMaintenance(input: SaveCtuMaintenanceInput): Promise {\n let url_ = this.baseUrl + \"/api/app/Application/SaveCtuMaintenance\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processSaveCtuMaintenance(_response));\n });\n }\n\n protected processSaveCtuMaintenance(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200) {\n return response.text().then((_responseText) => {\n let result200: any = null;\n let resultData200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\n result200 = SaveCtuMaintenanceOutput.fromJS(resultData200);\n return result200;\n });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\nexport interface ITokenClient {\n /**\n * トークンを非同期で生成します。\n * @param input サインインの要求情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n generateToken(input: SignInInput2): Promise;\n}\n\nexport class TokenClient extends WebApiClient implements ITokenClient {\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\n private baseUrl: string;\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\n\n constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\n super();\n this.http = http ? http : window;\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * トークンを非同期で生成します。\n * @param input サインインの要求情報を指定します。\n * @return 結果を戻す非同期操作を返します。\n */\n generateToken(input: SignInInput2): Promise {\n let url_ = this.baseUrl + \"/api/app/Token\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(input);\n\n let options_ = {\n body: content_,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/octet-stream\"\n }\n };\n\n return this.transformOptions(options_).then(transformedOptions_ => {\n return this.http.fetch(url_, transformedOptions_);\n }).then((_response: Response) => {\n return this.transformResult(url_, _response, (_response: Response) => this.processGenerateToken(_response));\n });\n }\n\n protected processGenerateToken(response: Response): Promise {\n const status = response.status;\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers ? response.headers.get(\"content-disposition\") : undefined;\n const fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\n const fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\n return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; });\n } else if (status !== 200 && status !== 204) {\n return response.text().then((_responseText) => {\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\n });\n }\n return Promise.resolve(null);\n }\n}\n\n/** 出力情報が持つ規定情報を提供します。 */\nexport abstract class OutputBase implements IOutputBase {\n\n constructor(data?: IOutputBase) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n }\n\n static fromJS(data: any): OutputBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'OutputBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n return data; \n }\n\n clone(): OutputBase {\n throw new Error(\"The abstract class 'OutputBase' cannot be instantiated.\");\n }\n}\n\n/** 出力情報が持つ規定情報を提供します。 */\nexport interface IOutputBase {\n}\n\n/** エラーの出力情報を提供します。 */\nexport class ErrorOutput extends OutputBase implements IErrorOutput {\n /** エラーが発生したかどうかを表す値を取得または設定します。 */\n isError!: boolean;\n /** エラーが発生していた場合のエラー内容を取得または設定します。 */\n errorMessage?: string | undefined;\n\n constructor(data?: IErrorOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.isError = _data[\"isError\"];\n this.errorMessage = _data[\"errorMessage\"];\n }\n }\n\n static fromJS(data: any): ErrorOutput {\n data = typeof data === 'object' ? data : {};\n let result = new ErrorOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"isError\"] = this.isError;\n data[\"errorMessage\"] = this.errorMessage;\n super.toJSON(data);\n return data; \n }\n\n clone(): ErrorOutput {\n const json = this.toJSON();\n let result = new ErrorOutput();\n result.init(json);\n return result;\n }\n}\n\n/** エラーの出力情報を提供します。 */\nexport interface IErrorOutput extends IOutputBase {\n /** エラーが発生したかどうかを表す値を取得または設定します。 */\n isError: boolean;\n /** エラーが発生していた場合のエラー内容を取得または設定します。 */\n errorMessage?: string | undefined;\n}\n\n/** 型式の出力情報を提供します。 */\nexport class GetModelOutput extends ErrorOutput implements IGetModelOutput {\n /** 型式 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetModelOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetModelOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetModelOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetModelOutput {\n const json = this.toJSON();\n let result = new GetModelOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 型式の出力情報を提供します。 */\nexport interface IGetModelOutput extends IErrorOutput {\n /** 型式 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n}\n\nexport class KeyValuePairOfIntegerAndString implements IKeyValuePairOfIntegerAndString {\n key!: number;\n value!: string;\n\n constructor(data?: IKeyValuePairOfIntegerAndString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValuePairOfIntegerAndString {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValuePairOfIntegerAndString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValuePairOfIntegerAndString {\n const json = this.toJSON();\n let result = new KeyValuePairOfIntegerAndString();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValuePairOfIntegerAndString {\n key: number;\n value: string;\n}\n\n/** メーカーの出力情報を提供します。 */\nexport class GetManufacturerOutput extends ErrorOutput implements IGetManufacturerOutput {\n /** メーカー リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetManufacturerOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetManufacturerOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetManufacturerOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetManufacturerOutput {\n const json = this.toJSON();\n let result = new GetManufacturerOutput();\n result.init(json);\n return result;\n }\n}\n\n/** メーカーの出力情報を提供します。 */\nexport interface IGetManufacturerOutput extends IErrorOutput {\n /** メーカー リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n}\n\n/** 施工機の出力情報を提供します。 */\nexport class GetMachineTypeOutput extends ErrorOutput implements IGetMachineTypeOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetMachineTypeOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMachineTypeOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineTypeOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMachineTypeOutput {\n const json = this.toJSON();\n let result = new GetMachineTypeOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機の出力情報を提供します。 */\nexport interface IGetMachineTypeOutput extends IErrorOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n}\n\n/** 整備区分の出力情報を提供します。 */\nexport class GetMaintenanceDivisionOutput extends ErrorOutput implements IGetMaintenanceDivisionOutput {\n /** 整備区分 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetMaintenanceDivisionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMaintenanceDivisionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceDivisionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenanceDivisionOutput {\n const json = this.toJSON();\n let result = new GetMaintenanceDivisionOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備区分の出力情報を提供します。 */\nexport interface IGetMaintenanceDivisionOutput extends IErrorOutput {\n /** 整備区分 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString[] | undefined;\n}\n\nexport class KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString implements IKeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString {\n key!: number;\n value!: KeyValuePairOfIntegerAndString[];\n\n constructor(data?: IKeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n if (!data) {\n this.value = [];\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n if (Array.isArray(_data[\"value\"])) {\n this.value = [] as any;\n for (let item of _data[\"value\"])\n this.value!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n if (Array.isArray(this.value)) {\n data[\"value\"] = [];\n for (let item of this.value)\n data[\"value\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString {\n const json = this.toJSON();\n let result = new KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString {\n key: number;\n value: KeyValuePairOfIntegerAndString[];\n}\n\n/** 点検項目の出力情報を提供します。 */\nexport class GetInspectionGroupOutput extends ErrorOutput implements IGetInspectionGroupOutput {\n /** 点検項目 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetInspectionGroupOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetInspectionGroupOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetInspectionGroupOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetInspectionGroupOutput {\n const json = this.toJSON();\n let result = new GetInspectionGroupOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 点検項目の出力情報を提供します。 */\nexport interface IGetInspectionGroupOutput extends IErrorOutput {\n /** 点検項目 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n}\n\n/** 点検区分の出力情報を提供します。 */\nexport class GetInspectionDivisionOutput extends ErrorOutput implements IGetInspectionDivisionOutput {\n /** 点検区分 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetInspectionDivisionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetInspectionDivisionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetInspectionDivisionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetInspectionDivisionOutput {\n const json = this.toJSON();\n let result = new GetInspectionDivisionOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 点検区分の出力情報を提供します。 */\nexport interface IGetInspectionDivisionOutput extends IErrorOutput {\n /** 点検区分 リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString[] | undefined;\n}\n\n/** CTU の出力情報を提供します。 */\nexport class GetCtuOutput extends ErrorOutput implements IGetCtuOutput {\n /** 自動 CTU リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n /** 保全 CTU リストを取得または設定します。 */\n maintenanceItems?: KeyValuePairOfIntegerAndString[] | undefined;\n\n constructor(data?: IGetCtuOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n if (Array.isArray(_data[\"maintenanceItems\"])) {\n this.maintenanceItems = [] as any;\n for (let item of _data[\"maintenanceItems\"])\n this.maintenanceItems!.push(KeyValuePairOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetCtuOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCtuOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n if (Array.isArray(this.maintenanceItems)) {\n data[\"maintenanceItems\"] = [];\n for (let item of this.maintenanceItems)\n data[\"maintenanceItems\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCtuOutput {\n const json = this.toJSON();\n let result = new GetCtuOutput();\n result.init(json);\n return result;\n }\n}\n\n/** CTU の出力情報を提供します。 */\nexport interface IGetCtuOutput extends IErrorOutput {\n /** 自動 CTU リストを取得または設定します。 */\n items?: KeyValuePairOfIntegerAndString[] | undefined;\n /** 保全 CTU リストを取得または設定します。 */\n maintenanceItems?: KeyValuePairOfIntegerAndString[] | undefined;\n}\n\n/** 施工機エラーの出力情報を提供します。 */\nexport class GetMachineErrorOutput extends ErrorOutput implements IGetMachineErrorOutput {\n /** CTU エラーを取得または設定します。 */\n ctuError?: string | undefined;\n\n constructor(data?: IGetMachineErrorOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.ctuError = _data[\"ctuError\"];\n }\n }\n\n static fromJS(data: any): GetMachineErrorOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineErrorOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"ctuError\"] = this.ctuError;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMachineErrorOutput {\n const json = this.toJSON();\n let result = new GetMachineErrorOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機エラーの出力情報を提供します。 */\nexport interface IGetMachineErrorOutput extends IErrorOutput {\n /** CTU エラーを取得または設定します。 */\n ctuError?: string | undefined;\n}\n\n/** 施工機エラーの情報を取得するために必要な入力情報を提供します。 */\nexport class GetMachineErrorInput implements IGetMachineErrorInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n\n constructor(data?: IGetMachineErrorInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n }\n }\n\n static fromJS(data: any): GetMachineErrorInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineErrorInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n return data; \n }\n\n clone(): GetMachineErrorInput {\n const json = this.toJSON();\n let result = new GetMachineErrorInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機エラーの情報を取得するために必要な入力情報を提供します。 */\nexport interface IGetMachineErrorInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n}\n\n/** 全施工機エラーの出力情報を提供します。 */\nexport class GetAllMachineErrorOutput extends ErrorOutput implements IGetAllMachineErrorOutput {\n /** エラーが発生している施工機リストを取得または設定します。 */\n machineIds?: string[] | undefined;\n\n constructor(data?: IGetAllMachineErrorOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"machineIds\"])) {\n this.machineIds = [] as any;\n for (let item of _data[\"machineIds\"])\n this.machineIds!.push(item);\n }\n }\n }\n\n static fromJS(data: any): GetAllMachineErrorOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetAllMachineErrorOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.machineIds)) {\n data[\"machineIds\"] = [];\n for (let item of this.machineIds)\n data[\"machineIds\"].push(item);\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetAllMachineErrorOutput {\n const json = this.toJSON();\n let result = new GetAllMachineErrorOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 全施工機エラーの出力情報を提供します。 */\nexport interface IGetAllMachineErrorOutput extends IErrorOutput {\n /** エラーが発生している施工機リストを取得または設定します。 */\n machineIds?: string[] | undefined;\n}\n\n/** 現場の出力情報を提供します。 */\nexport class CheckPasswordOutput extends ErrorOutput implements ICheckPasswordOutput {\n\n constructor(data?: ICheckPasswordOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): CheckPasswordOutput {\n data = typeof data === 'object' ? data : {};\n let result = new CheckPasswordOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): CheckPasswordOutput {\n const json = this.toJSON();\n let result = new CheckPasswordOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場の出力情報を提供します。 */\nexport interface ICheckPasswordOutput extends IErrorOutput {\n}\n\n/** 現場の入力情報を提供します。 */\nexport class CheckPasswordInput implements ICheckPasswordInput {\n /** ユーザーパスワード情報を取得または設定します。 */\n password?: string | undefined;\n\n constructor(data?: ICheckPasswordInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.password = _data[\"password\"];\n }\n }\n\n static fromJS(data: any): CheckPasswordInput {\n data = typeof data === 'object' ? data : {};\n let result = new CheckPasswordInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"password\"] = this.password;\n return data; \n }\n\n clone(): CheckPasswordInput {\n const json = this.toJSON();\n let result = new CheckPasswordInput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場の入力情報を提供します。 */\nexport interface ICheckPasswordInput {\n /** ユーザーパスワード情報を取得または設定します。 */\n password?: string | undefined;\n}\n\n/** 認証済ユーザー情報の取得の結果情報を提供します。 */\nexport class GetAuthenticatedUserOutput extends ErrorOutput implements IGetAuthenticatedUserOutput {\n /** ユーザー ID を取得または設定します。 */\n userId?: string | undefined;\n /** ユーザ名を取得または設定します。 */\n userName?: string | undefined;\n /** 検印者を取得または設定します。 */\n inspector?: string | undefined;\n\n constructor(data?: IGetAuthenticatedUserOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.userId = _data[\"userId\"];\n this.userName = _data[\"userName\"];\n this.inspector = _data[\"inspector\"];\n }\n }\n\n static fromJS(data: any): GetAuthenticatedUserOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetAuthenticatedUserOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"userId\"] = this.userId;\n data[\"userName\"] = this.userName;\n data[\"inspector\"] = this.inspector;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetAuthenticatedUserOutput {\n const json = this.toJSON();\n let result = new GetAuthenticatedUserOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 認証済ユーザー情報の取得の結果情報を提供します。 */\nexport interface IGetAuthenticatedUserOutput extends IErrorOutput {\n /** ユーザー ID を取得または設定します。 */\n userId?: string | undefined;\n /** ユーザ名を取得または設定します。 */\n userName?: string | undefined;\n /** 検印者を取得または設定します。 */\n inspector?: string | undefined;\n}\n\n/** その他報告の出力情報を提供します。 */\nexport class GetOtherReportOutput extends ErrorOutput implements IGetOtherReportOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: OtherReportItem[] | undefined;\n\n constructor(data?: IGetOtherReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(OtherReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetOtherReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetOtherReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetOtherReportOutput {\n const json = this.toJSON();\n let result = new GetOtherReportOutput();\n result.init(json);\n return result;\n }\n}\n\n/** その他報告の出力情報を提供します。 */\nexport interface IGetOtherReportOutput extends IErrorOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: OtherReportItem[] | undefined;\n}\n\n/** その他報告の 1 項目分の情報を提供します。 */\nexport class OtherReportItem implements IOtherReportItem {\n /** 報告管理 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 報告日を取得または設定します。 */\n reportAt!: string;\n /** 報告事項を取得または設定します。 */\n reportItem?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId!: number;\n /** 報告場所を取得または設定します。 */\n site?: string | undefined;\n /** 報告者を取得または設定します。 */\n reporter?: string | undefined;\n /** 画像保存ディレクトリパスを取得または設定します。 */\n imageDirectoryPath?: string | undefined;\n /** 画像ファイルリストを取得または設定します。 */\n imageFilePath?: string[] | undefined;\n\n constructor(data?: IOtherReportItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.reportAt = _data[\"reportAt\"];\n this.reportItem = _data[\"reportItem\"];\n this.areaId = _data[\"areaId\"];\n this.site = _data[\"site\"];\n this.reporter = _data[\"reporter\"];\n this.imageDirectoryPath = _data[\"imageDirectoryPath\"];\n if (Array.isArray(_data[\"imageFilePath\"])) {\n this.imageFilePath = [] as any;\n for (let item of _data[\"imageFilePath\"])\n this.imageFilePath!.push(item);\n }\n }\n }\n\n static fromJS(data: any): OtherReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new OtherReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"reportAt\"] = this.reportAt;\n data[\"reportItem\"] = this.reportItem;\n data[\"areaId\"] = this.areaId;\n data[\"site\"] = this.site;\n data[\"reporter\"] = this.reporter;\n data[\"imageDirectoryPath\"] = this.imageDirectoryPath;\n if (Array.isArray(this.imageFilePath)) {\n data[\"imageFilePath\"] = [];\n for (let item of this.imageFilePath)\n data[\"imageFilePath\"].push(item);\n }\n return data; \n }\n\n clone(): OtherReportItem {\n const json = this.toJSON();\n let result = new OtherReportItem();\n result.init(json);\n return result;\n }\n}\n\n/** その他報告の 1 項目分の情報を提供します。 */\nexport interface IOtherReportItem {\n /** 報告管理 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 報告日を取得または設定します。 */\n reportAt: string;\n /** 報告事項を取得または設定します。 */\n reportItem?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId: number;\n /** 報告場所を取得または設定します。 */\n site?: string | undefined;\n /** 報告者を取得または設定します。 */\n reporter?: string | undefined;\n /** 画像保存ディレクトリパスを取得または設定します。 */\n imageDirectoryPath?: string | undefined;\n /** 画像ファイルリストを取得または設定します。 */\n imageFilePath?: string[] | undefined;\n}\n\n/** その他報告の取得に必要な入力情報を提供します。 */\nexport class GetOtherReportInput implements IGetOtherReportInput {\n /** 検索種別を取得または設定します。 */\n searchType!: OtherReportSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 画像の保存有無条件を検索するかどうかを表す値を取得または設定します。 */\n isSavedImage?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n\n constructor(data?: IGetOtherReportInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.searchType = _data[\"searchType\"];\n this.searchWord = _data[\"searchWord\"];\n this.isSavedImage = _data[\"isSavedImage\"];\n this.searchBeginAt = _data[\"searchBeginAt\"];\n this.searchEndAt = _data[\"searchEndAt\"];\n }\n }\n\n static fromJS(data: any): GetOtherReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetOtherReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"searchType\"] = this.searchType;\n data[\"searchWord\"] = this.searchWord;\n data[\"isSavedImage\"] = this.isSavedImage;\n data[\"searchBeginAt\"] = this.searchBeginAt;\n data[\"searchEndAt\"] = this.searchEndAt;\n return data; \n }\n\n clone(): GetOtherReportInput {\n const json = this.toJSON();\n let result = new GetOtherReportInput();\n result.init(json);\n return result;\n }\n}\n\n/** その他報告の取得に必要な入力情報を提供します。 */\nexport interface IGetOtherReportInput {\n /** 検索種別を取得または設定します。 */\n searchType: OtherReportSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 画像の保存有無条件を検索するかどうかを表す値を取得または設定します。 */\n isSavedImage?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n}\n\n/** その他報告の検索種別を表す列挙値を提供します。 */\nexport enum OtherReportSearchType {\n None = 0,\n Reporter = 1,\n Report = 2,\n}\n\n/** 帳票の出力情報を提供します。 */\nexport abstract class GetReportOutputBase extends ErrorOutput implements IGetReportOutputBase {\n /** 帳票の URL を取得または設定します。 */\n reportUrl?: string | undefined;\n\n constructor(data?: IGetReportOutputBase) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportUrl = _data[\"reportUrl\"];\n }\n }\n\n static fromJS(data: any): GetReportOutputBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'GetReportOutputBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportUrl\"] = this.reportUrl;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetReportOutputBase {\n throw new Error(\"The abstract class 'GetReportOutputBase' cannot be instantiated.\");\n }\n}\n\n/** 帳票の出力情報を提供します。 */\nexport interface IGetReportOutputBase extends IErrorOutput {\n /** 帳票の URL を取得または設定します。 */\n reportUrl?: string | undefined;\n}\n\n/** 日常点検の帳票の出力情報を提供します。 */\nexport class GetDailyReportOutput extends GetReportOutputBase implements IGetDailyReportOutput {\n /** 検印リストを取得または設定します。 */\n stampItems?: KeyValueItemOfDayOfWeekAndInspectedStampItem[] | undefined;\n\n constructor(data?: IGetDailyReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"stampItems\"])) {\n this.stampItems = [] as any;\n for (let item of _data[\"stampItems\"])\n this.stampItems!.push(KeyValueItemOfDayOfWeekAndInspectedStampItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetDailyReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDailyReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.stampItems)) {\n data[\"stampItems\"] = [];\n for (let item of this.stampItems)\n data[\"stampItems\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetDailyReportOutput {\n const json = this.toJSON();\n let result = new GetDailyReportOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検の帳票の出力情報を提供します。 */\nexport interface IGetDailyReportOutput extends IGetReportOutputBase {\n /** 検印リストを取得または設定します。 */\n stampItems?: KeyValueItemOfDayOfWeekAndInspectedStampItem[] | undefined;\n}\n\nexport class KeyValueItemOfDayOfWeekAndInspectedStampItem implements IKeyValueItemOfDayOfWeekAndInspectedStampItem {\n key!: DayOfWeek;\n value?: InspectedStampItem | undefined;\n\n constructor(data?: IKeyValueItemOfDayOfWeekAndInspectedStampItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? InspectedStampItem.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfDayOfWeekAndInspectedStampItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfDayOfWeekAndInspectedStampItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfDayOfWeekAndInspectedStampItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfDayOfWeekAndInspectedStampItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfDayOfWeekAndInspectedStampItem {\n key: DayOfWeek;\n value?: InspectedStampItem | undefined;\n}\n\nexport enum DayOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\n/** 検印の情報を提供します。 */\nexport class InspectedStampItem implements IInspectedStampItem {\n /** 帳票 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 帳票日を取得または設定します。 */\n reportAt?: string | undefined;\n /** 検印者を取得または設定します。 */\n inspector?: string | undefined;\n /** 初検班長を取得または設定します。 */\n firstTeamLeader?: string | undefined;\n /** 完検班長を取得または設定します。 */\n completeTeamLeader?: string | undefined;\n /** 初検課長を取得または設定します。 */\n firstManager?: string | undefined;\n /** 完検課長を取得または設定します。 */\n completeManager?: string | undefined;\n /** 検印の情報が存在するかどうかを表す値を取得します。 */\n exist!: boolean;\n /** 検印済かどうかを表す値を取得します。 */\n isChecked!: boolean;\n\n constructor(data?: IInspectedStampItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.reportAt = _data[\"reportAt\"];\n this.inspector = _data[\"inspector\"];\n this.firstTeamLeader = _data[\"firstTeamLeader\"];\n this.completeTeamLeader = _data[\"completeTeamLeader\"];\n this.firstManager = _data[\"firstManager\"];\n this.completeManager = _data[\"completeManager\"];\n this.exist = _data[\"exist\"];\n this.isChecked = _data[\"isChecked\"];\n }\n }\n\n static fromJS(data: any): InspectedStampItem {\n data = typeof data === 'object' ? data : {};\n let result = new InspectedStampItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"reportAt\"] = this.reportAt;\n data[\"inspector\"] = this.inspector;\n data[\"firstTeamLeader\"] = this.firstTeamLeader;\n data[\"completeTeamLeader\"] = this.completeTeamLeader;\n data[\"firstManager\"] = this.firstManager;\n data[\"completeManager\"] = this.completeManager;\n data[\"exist\"] = this.exist;\n data[\"isChecked\"] = this.isChecked;\n return data; \n }\n\n clone(): InspectedStampItem {\n const json = this.toJSON();\n let result = new InspectedStampItem();\n result.init(json);\n return result;\n }\n}\n\n/** 検印の情報を提供します。 */\nexport interface IInspectedStampItem {\n /** 帳票 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 帳票日を取得または設定します。 */\n reportAt?: string | undefined;\n /** 検印者を取得または設定します。 */\n inspector?: string | undefined;\n /** 初検班長を取得または設定します。 */\n firstTeamLeader?: string | undefined;\n /** 完検班長を取得または設定します。 */\n completeTeamLeader?: string | undefined;\n /** 初検課長を取得または設定します。 */\n firstManager?: string | undefined;\n /** 完検課長を取得または設定します。 */\n completeManager?: string | undefined;\n /** 検印の情報が存在するかどうかを表す値を取得します。 */\n exist: boolean;\n /** 検印済かどうかを表す値を取得します。 */\n isChecked: boolean;\n}\n\n/** 帳票のデータの取得に必要な入力情報の既定情報を提供します。 */\nexport abstract class GetReportInputBase implements IGetReportInputBase {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 帳票日時を取得または設定します。 */\n reportAt!: string;\n\n constructor(data?: IGetReportInputBase) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.reportAt = _data[\"reportAt\"];\n }\n }\n\n static fromJS(data: any): GetReportInputBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'GetReportInputBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"reportAt\"] = this.reportAt;\n return data; \n }\n\n clone(): GetReportInputBase {\n throw new Error(\"The abstract class 'GetReportInputBase' cannot be instantiated.\");\n }\n}\n\n/** 帳票のデータの取得に必要な入力情報の既定情報を提供します。 */\nexport interface IGetReportInputBase {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 帳票日時を取得または設定します。 */\n reportAt: string;\n}\n\n/** 日常点検の帳票のデータの取得に必要な入力情報を提供します。 */\nexport class GetDailyReportInput extends GetReportInputBase implements IGetDailyReportInput {\n\n constructor(data?: IGetDailyReportInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): GetDailyReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDailyReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): GetDailyReportInput {\n const json = this.toJSON();\n let result = new GetDailyReportInput();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検の帳票のデータの取得に必要な入力情報を提供します。 */\nexport interface IGetDailyReportInput extends IGetReportInputBase {\n}\n\n/** 週間月例点検の帳票の出力情報を提供します。 */\nexport class GetWeeklyReportOutput extends GetReportOutputBase implements IGetWeeklyReportOutput {\n /** 検印リストを取得または設定します。 */\n stampItems?: KeyValueItemOfWeekOfMonthAndInspectedStampItem[] | undefined;\n\n constructor(data?: IGetWeeklyReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"stampItems\"])) {\n this.stampItems = [] as any;\n for (let item of _data[\"stampItems\"])\n this.stampItems!.push(KeyValueItemOfWeekOfMonthAndInspectedStampItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetWeeklyReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetWeeklyReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.stampItems)) {\n data[\"stampItems\"] = [];\n for (let item of this.stampItems)\n data[\"stampItems\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetWeeklyReportOutput {\n const json = this.toJSON();\n let result = new GetWeeklyReportOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検の帳票の出力情報を提供します。 */\nexport interface IGetWeeklyReportOutput extends IGetReportOutputBase {\n /** 検印リストを取得または設定します。 */\n stampItems?: KeyValueItemOfWeekOfMonthAndInspectedStampItem[] | undefined;\n}\n\nexport class KeyValueItemOfWeekOfMonthAndInspectedStampItem implements IKeyValueItemOfWeekOfMonthAndInspectedStampItem {\n key!: WeekOfMonth;\n value?: InspectedStampItem | undefined;\n\n constructor(data?: IKeyValueItemOfWeekOfMonthAndInspectedStampItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? InspectedStampItem.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfWeekOfMonthAndInspectedStampItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfWeekOfMonthAndInspectedStampItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfWeekOfMonthAndInspectedStampItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfWeekOfMonthAndInspectedStampItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfWeekOfMonthAndInspectedStampItem {\n key: WeekOfMonth;\n value?: InspectedStampItem | undefined;\n}\n\nexport enum WeekOfMonth {\n First = 1,\n Second = 2,\n Third = 3,\n Fourth = 4,\n Fifth = 5,\n}\n\n/** 週間月例点検の帳票のデータの取得に必要な入力情報を提供します。 */\nexport class GetWeeklyReportInput extends GetReportInputBase implements IGetWeeklyReportInput {\n\n constructor(data?: IGetWeeklyReportInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): GetWeeklyReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetWeeklyReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): GetWeeklyReportInput {\n const json = this.toJSON();\n let result = new GetWeeklyReportInput();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検の帳票のデータの取得に必要な入力情報を提供します。 */\nexport interface IGetWeeklyReportInput extends IGetReportInputBase {\n}\n\n/** 現場完了点検の帳票の出力情報を提供します。 */\nexport class GetCompletionReportOutput extends GetReportOutputBase implements IGetCompletionReportOutput {\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n\n constructor(data?: IGetCompletionReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.stampItem = _data[\"stampItem\"] ? InspectedStampItem.fromJS(_data[\"stampItem\"]) : undefined;\n }\n }\n\n static fromJS(data: any): GetCompletionReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCompletionReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"stampItem\"] = this.stampItem ? this.stampItem.toJSON() : undefined;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCompletionReportOutput {\n const json = this.toJSON();\n let result = new GetCompletionReportOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検の帳票の出力情報を提供します。 */\nexport interface IGetCompletionReportOutput extends IGetReportOutputBase {\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n}\n\n/** 現場完了点検の帳票のデータの取得に必要な入力情報を提供します。 */\nexport class GetCompletionReportInput extends GetReportInputBase implements IGetCompletionReportInput {\n\n constructor(data?: IGetCompletionReportInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): GetCompletionReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCompletionReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCompletionReportInput {\n const json = this.toJSON();\n let result = new GetCompletionReportInput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検の帳票のデータの取得に必要な入力情報を提供します。 */\nexport interface IGetCompletionReportInput extends IGetReportInputBase {\n}\n\n/** 整備記録の帳票の出力情報を提供します。 */\nexport class GetMaintenanceReportOutput extends GetReportOutputBase implements IGetMaintenanceReportOutput {\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n\n constructor(data?: IGetMaintenanceReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.stampItem = _data[\"stampItem\"] ? InspectedStampItem.fromJS(_data[\"stampItem\"]) : undefined;\n }\n }\n\n static fromJS(data: any): GetMaintenanceReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"stampItem\"] = this.stampItem ? this.stampItem.toJSON() : undefined;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenanceReportOutput {\n const json = this.toJSON();\n let result = new GetMaintenanceReportOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備記録の帳票の出力情報を提供します。 */\nexport interface IGetMaintenanceReportOutput extends IGetReportOutputBase {\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n}\n\n/** 整備記録の帳票のデータの取得に必要な入力情報を提供します。 */\nexport class GetMaintenanceReportInput extends GetReportInputBase implements IGetMaintenanceReportInput {\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n /** 帳票 No を取得または設定します。 */\n reportNo?: string | undefined;\n\n constructor(data?: IGetMaintenanceReportInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.machineType = _data[\"machineType\"];\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): GetMaintenanceReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineType\"] = this.machineType;\n data[\"reportNo\"] = this.reportNo;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenanceReportInput {\n const json = this.toJSON();\n let result = new GetMaintenanceReportInput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備記録の帳票のデータの取得に必要な入力情報を提供します。 */\nexport interface IGetMaintenanceReportInput extends IGetReportInputBase {\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n /** 帳票 No を取得または設定します。 */\n reportNo?: string | undefined;\n}\n\nexport enum MachineType {\n BaseMachine = 1,\n Auger = 2,\n Lift = 3,\n}\n\n/** 整備記録の帳票プレビューのデータの取得に必要な入力情報を提供します。 */\nexport class GetMaintenancePreviewReportInput implements IGetMaintenancePreviewReportInput {\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n\n constructor(data?: IGetMaintenancePreviewReportInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineType = _data[\"machineType\"];\n }\n }\n\n static fromJS(data: any): GetMaintenancePreviewReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenancePreviewReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineType\"] = this.machineType;\n return data; \n }\n\n clone(): GetMaintenancePreviewReportInput {\n const json = this.toJSON();\n let result = new GetMaintenancePreviewReportInput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備記録の帳票プレビューのデータの取得に必要な入力情報を提供します。 */\nexport interface IGetMaintenancePreviewReportInput {\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n}\n\n/** 検印の更新の結果情報を提供します。 */\nexport abstract class UpdateInspectedStampOutputBase extends ErrorOutput implements IUpdateInspectedStampOutputBase {\n\n constructor(data?: IUpdateInspectedStampOutputBase) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): UpdateInspectedStampOutputBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'UpdateInspectedStampOutputBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateInspectedStampOutputBase {\n throw new Error(\"The abstract class 'UpdateInspectedStampOutputBase' cannot be instantiated.\");\n }\n}\n\n/** 検印の更新の結果情報を提供します。 */\nexport interface IUpdateInspectedStampOutputBase extends IErrorOutput {\n}\n\n/** 日常点検の検印の更新の結果情報を提供します。 */\nexport class UpdateDailyInspectedStampOutput extends UpdateInspectedStampOutputBase implements IUpdateDailyInspectedStampOutput {\n\n constructor(data?: IUpdateDailyInspectedStampOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): UpdateDailyInspectedStampOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateDailyInspectedStampOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateDailyInspectedStampOutput {\n const json = this.toJSON();\n let result = new UpdateDailyInspectedStampOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検の検印の更新の結果情報を提供します。 */\nexport interface IUpdateDailyInspectedStampOutput extends IUpdateInspectedStampOutputBase {\n}\n\n/** 日常点検の検印情報の更新に必要な入力情報を提供します。 */\nexport class UpdateDailyInspectedStampInput implements IUpdateDailyInspectedStampInput {\n /** 検印リストを取得または設定します。 */\n stampItems?: InspectedStampItem[] | undefined;\n\n constructor(data?: IUpdateDailyInspectedStampInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"stampItems\"])) {\n this.stampItems = [] as any;\n for (let item of _data[\"stampItems\"])\n this.stampItems!.push(InspectedStampItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): UpdateDailyInspectedStampInput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateDailyInspectedStampInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.stampItems)) {\n data[\"stampItems\"] = [];\n for (let item of this.stampItems)\n data[\"stampItems\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): UpdateDailyInspectedStampInput {\n const json = this.toJSON();\n let result = new UpdateDailyInspectedStampInput();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検の検印情報の更新に必要な入力情報を提供します。 */\nexport interface IUpdateDailyInspectedStampInput {\n /** 検印リストを取得または設定します。 */\n stampItems?: InspectedStampItem[] | undefined;\n}\n\n/** 週間月例点検の検印の更新の結果情報を提供します。 */\nexport class UpdateWeeklyInspectedStampOutput extends UpdateInspectedStampOutputBase implements IUpdateWeeklyInspectedStampOutput {\n\n constructor(data?: IUpdateWeeklyInspectedStampOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): UpdateWeeklyInspectedStampOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateWeeklyInspectedStampOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateWeeklyInspectedStampOutput {\n const json = this.toJSON();\n let result = new UpdateWeeklyInspectedStampOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検の検印の更新の結果情報を提供します。 */\nexport interface IUpdateWeeklyInspectedStampOutput extends IUpdateInspectedStampOutputBase {\n}\n\n/** 週間月例点検の検印情報の更新に必要な入力情報を提供します。 */\nexport class UpdateWeeklyInspectedStampInput implements IUpdateWeeklyInspectedStampInput {\n /** 検印リストを取得または設定します。 */\n stampItems?: InspectedStampItem[] | undefined;\n\n constructor(data?: IUpdateWeeklyInspectedStampInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"stampItems\"])) {\n this.stampItems = [] as any;\n for (let item of _data[\"stampItems\"])\n this.stampItems!.push(InspectedStampItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): UpdateWeeklyInspectedStampInput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateWeeklyInspectedStampInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.stampItems)) {\n data[\"stampItems\"] = [];\n for (let item of this.stampItems)\n data[\"stampItems\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): UpdateWeeklyInspectedStampInput {\n const json = this.toJSON();\n let result = new UpdateWeeklyInspectedStampInput();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検の検印情報の更新に必要な入力情報を提供します。 */\nexport interface IUpdateWeeklyInspectedStampInput {\n /** 検印リストを取得または設定します。 */\n stampItems?: InspectedStampItem[] | undefined;\n}\n\n/** 現場完了点検の検印の更新の結果情報を提供します。 */\nexport class UpdateCompletionInspectedStampOutput extends UpdateInspectedStampOutputBase implements IUpdateCompletionInspectedStampOutput {\n\n constructor(data?: IUpdateCompletionInspectedStampOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): UpdateCompletionInspectedStampOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateCompletionInspectedStampOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateCompletionInspectedStampOutput {\n const json = this.toJSON();\n let result = new UpdateCompletionInspectedStampOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検の検印の更新の結果情報を提供します。 */\nexport interface IUpdateCompletionInspectedStampOutput extends IUpdateInspectedStampOutputBase {\n}\n\n/** 現場完了点検の検印情報の更新に必要な入力情報を提供します。 */\nexport class UpdateCompletionInspectedStampInput implements IUpdateCompletionInspectedStampInput {\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n\n constructor(data?: IUpdateCompletionInspectedStampInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.stampItem = _data[\"stampItem\"] ? InspectedStampItem.fromJS(_data[\"stampItem\"]) : undefined;\n }\n }\n\n static fromJS(data: any): UpdateCompletionInspectedStampInput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateCompletionInspectedStampInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"stampItem\"] = this.stampItem ? this.stampItem.toJSON() : undefined;\n return data; \n }\n\n clone(): UpdateCompletionInspectedStampInput {\n const json = this.toJSON();\n let result = new UpdateCompletionInspectedStampInput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検の検印情報の更新に必要な入力情報を提供します。 */\nexport interface IUpdateCompletionInspectedStampInput {\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n}\n\n/** 整備の検印の更新の結果情報を提供します。 */\nexport class UpdateMaintenanceInspectedStampOutput extends UpdateInspectedStampOutputBase implements IUpdateMaintenanceInspectedStampOutput {\n\n constructor(data?: IUpdateMaintenanceInspectedStampOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): UpdateMaintenanceInspectedStampOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateMaintenanceInspectedStampOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateMaintenanceInspectedStampOutput {\n const json = this.toJSON();\n let result = new UpdateMaintenanceInspectedStampOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備の検印の更新の結果情報を提供します。 */\nexport interface IUpdateMaintenanceInspectedStampOutput extends IUpdateInspectedStampOutputBase {\n}\n\n/** 整備の検印情報の更新に必要な入力情報を提供します。 */\nexport class UpdateMaintenanceInspectedStampInput implements IUpdateMaintenanceInspectedStampInput {\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n\n constructor(data?: IUpdateMaintenanceInspectedStampInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineType = _data[\"machineType\"];\n this.stampItem = _data[\"stampItem\"] ? InspectedStampItem.fromJS(_data[\"stampItem\"]) : undefined;\n }\n }\n\n static fromJS(data: any): UpdateMaintenanceInspectedStampInput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateMaintenanceInspectedStampInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineType\"] = this.machineType;\n data[\"stampItem\"] = this.stampItem ? this.stampItem.toJSON() : undefined;\n return data; \n }\n\n clone(): UpdateMaintenanceInspectedStampInput {\n const json = this.toJSON();\n let result = new UpdateMaintenanceInspectedStampInput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備の検印情報の更新に必要な入力情報を提供します。 */\nexport interface IUpdateMaintenanceInspectedStampInput {\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n /** 検印の情報を取得または設定します。 */\n stampItem?: InspectedStampItem | undefined;\n}\n\n/** 点検区分の出力情報を提供します。 */\nexport class InspectionDivisionOutput extends ErrorOutput implements IInspectionDivisionOutput {\n /** 点検区分 リストを取得または設定します。 */\n items?: InspectionDivisionItem[] | undefined;\n\n constructor(data?: IInspectionDivisionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(InspectionDivisionItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): InspectionDivisionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionDivisionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): InspectionDivisionOutput {\n const json = this.toJSON();\n let result = new InspectionDivisionOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 点検区分の出力情報を提供します。 */\nexport interface IInspectionDivisionOutput extends IErrorOutput {\n /** 点検区分 リストを取得または設定します。 */\n items?: InspectionDivisionItem[] | undefined;\n}\n\n/** 点検区分の情報を提供します。 */\nexport class InspectionDivisionItem implements IInspectionDivisionItem {\n /** 点検区分 ID を取得または設定します。 */\n id?: number | undefined;\n /** 点検グループ ID を取得または設定します。 */\n groupId?: number | undefined;\n /** 点検グループ名を取得または設定します。 */\n groupName?: string | undefined;\n /** 点検区分を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IInspectionDivisionItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.groupId = _data[\"groupId\"];\n this.groupName = _data[\"groupName\"];\n this.name = _data[\"name\"];\n this.weight = _data[\"weight\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): InspectionDivisionItem {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionDivisionItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"groupId\"] = this.groupId;\n data[\"groupName\"] = this.groupName;\n data[\"name\"] = this.name;\n data[\"weight\"] = this.weight;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): InspectionDivisionItem {\n const json = this.toJSON();\n let result = new InspectionDivisionItem();\n result.init(json);\n return result;\n }\n}\n\n/** 点検区分の情報を提供します。 */\nexport interface IInspectionDivisionItem {\n /** 点検区分 ID を取得または設定します。 */\n id?: number | undefined;\n /** 点検グループ ID を取得または設定します。 */\n groupId?: number | undefined;\n /** 点検グループ名を取得または設定します。 */\n groupName?: string | undefined;\n /** 点検区分を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 点検区分の入力情報を提供します。 */\nexport class InspectionDivisionInput implements IInspectionDivisionInput {\n /** 点検区分情報を取得または設定します。 */\n item?: InspectionDivisionItem | undefined;\n\n constructor(data?: IInspectionDivisionInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? InspectionDivisionItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): InspectionDivisionInput {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionDivisionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): InspectionDivisionInput {\n const json = this.toJSON();\n let result = new InspectionDivisionInput();\n result.init(json);\n return result;\n }\n}\n\n/** 点検区分の入力情報を提供します。 */\nexport interface IInspectionDivisionInput {\n /** 点検区分情報を取得または設定します。 */\n item?: InspectionDivisionItem | undefined;\n}\n\n/** 点検項目の出力情報を提供します。 */\nexport class InspectionItemOutput extends ErrorOutput implements IInspectionItemOutput {\n /** 点検項目 リストを取得または設定します。 */\n items?: InspectionItemItem[] | undefined;\n\n constructor(data?: IInspectionItemOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(InspectionItemItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): InspectionItemOutput {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionItemOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): InspectionItemOutput {\n const json = this.toJSON();\n let result = new InspectionItemOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 点検項目の出力情報を提供します。 */\nexport interface IInspectionItemOutput extends IErrorOutput {\n /** 点検項目 リストを取得または設定します。 */\n items?: InspectionItemItem[] | undefined;\n}\n\n/** 点検項目の情報を提供します。 */\nexport class InspectionItemItem implements IInspectionItemItem {\n /** 点検項目 ID を取得または設定します。 */\n id?: number | undefined;\n /** 点検区分 ID を取得または設定します。 */\n divisionId?: number | undefined;\n /** 点検区分を取得または設定します。 */\n divisionName?: string | undefined;\n /** 点検グループ ID を取得または設定します。 */\n groupTypeId?: number | undefined;\n /** 点検グループを取得または設定します。 */\n groupTypeName?: string | undefined;\n /** 点検項目を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** 単位を取得または設定します。 */\n unit?: string | undefined;\n /** 入力値下限を取得または設定します。 */\n inputLowerLimit?: string | undefined;\n /** 入力値上限を取得または設定します。 */\n inputHigherLimit?: string | undefined;\n /** 基準値軽アラーム下限を取得または設定します。 */\n lightAlarmLowerLimit?: string | undefined;\n /** 基準値軽アラーム上限を取得または設定します。 */\n lightAlarmHigherLimit?: string | undefined;\n /** 基準値重アラーム下限を取得または設定します。 */\n heavyAlarmLowerLimit?: string | undefined;\n /** 基準値重アラーム上限を取得または設定します。 */\n heavyAlarmHigherLimit?: string | undefined;\n /** 備考を取得または設定します。 */\n remarks?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IInspectionItemItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.divisionId = _data[\"divisionId\"];\n this.divisionName = _data[\"divisionName\"];\n this.groupTypeId = _data[\"groupTypeId\"];\n this.groupTypeName = _data[\"groupTypeName\"];\n this.name = _data[\"name\"];\n this.weight = _data[\"weight\"];\n this.unit = _data[\"unit\"];\n this.inputLowerLimit = _data[\"inputLowerLimit\"];\n this.inputHigherLimit = _data[\"inputHigherLimit\"];\n this.lightAlarmLowerLimit = _data[\"lightAlarmLowerLimit\"];\n this.lightAlarmHigherLimit = _data[\"lightAlarmHigherLimit\"];\n this.heavyAlarmLowerLimit = _data[\"heavyAlarmLowerLimit\"];\n this.heavyAlarmHigherLimit = _data[\"heavyAlarmHigherLimit\"];\n this.remarks = _data[\"remarks\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): InspectionItemItem {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionItemItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"divisionId\"] = this.divisionId;\n data[\"divisionName\"] = this.divisionName;\n data[\"groupTypeId\"] = this.groupTypeId;\n data[\"groupTypeName\"] = this.groupTypeName;\n data[\"name\"] = this.name;\n data[\"weight\"] = this.weight;\n data[\"unit\"] = this.unit;\n data[\"inputLowerLimit\"] = this.inputLowerLimit;\n data[\"inputHigherLimit\"] = this.inputHigherLimit;\n data[\"lightAlarmLowerLimit\"] = this.lightAlarmLowerLimit;\n data[\"lightAlarmHigherLimit\"] = this.lightAlarmHigherLimit;\n data[\"heavyAlarmLowerLimit\"] = this.heavyAlarmLowerLimit;\n data[\"heavyAlarmHigherLimit\"] = this.heavyAlarmHigherLimit;\n data[\"remarks\"] = this.remarks;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): InspectionItemItem {\n const json = this.toJSON();\n let result = new InspectionItemItem();\n result.init(json);\n return result;\n }\n}\n\n/** 点検項目の情報を提供します。 */\nexport interface IInspectionItemItem {\n /** 点検項目 ID を取得または設定します。 */\n id?: number | undefined;\n /** 点検区分 ID を取得または設定します。 */\n divisionId?: number | undefined;\n /** 点検区分を取得または設定します。 */\n divisionName?: string | undefined;\n /** 点検グループ ID を取得または設定します。 */\n groupTypeId?: number | undefined;\n /** 点検グループを取得または設定します。 */\n groupTypeName?: string | undefined;\n /** 点検項目を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** 単位を取得または設定します。 */\n unit?: string | undefined;\n /** 入力値下限を取得または設定します。 */\n inputLowerLimit?: string | undefined;\n /** 入力値上限を取得または設定します。 */\n inputHigherLimit?: string | undefined;\n /** 基準値軽アラーム下限を取得または設定します。 */\n lightAlarmLowerLimit?: string | undefined;\n /** 基準値軽アラーム上限を取得または設定します。 */\n lightAlarmHigherLimit?: string | undefined;\n /** 基準値重アラーム下限を取得または設定します。 */\n heavyAlarmLowerLimit?: string | undefined;\n /** 基準値重アラーム上限を取得または設定します。 */\n heavyAlarmHigherLimit?: string | undefined;\n /** 備考を取得または設定します。 */\n remarks?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 点検項目の入力情報を提供します。 */\nexport class InspectionItemInput implements IInspectionItemInput {\n /** 点検項目情報を取得または設定します。 */\n item?: InspectionItemItem | undefined;\n\n constructor(data?: IInspectionItemInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? InspectionItemItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): InspectionItemInput {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionItemInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): InspectionItemInput {\n const json = this.toJSON();\n let result = new InspectionItemInput();\n result.init(json);\n return result;\n }\n}\n\n/** 点検項目の入力情報を提供します。 */\nexport interface IInspectionItemInput {\n /** 点検項目情報を取得または設定します。 */\n item?: InspectionItemItem | undefined;\n}\n\n/** 施工機の出力情報を提供します。 */\nexport class MachineOutput extends ErrorOutput implements IMachineOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: MachineItem[] | undefined;\n\n constructor(data?: IMachineOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MachineOutput {\n data = typeof data === 'object' ? data : {};\n let result = new MachineOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MachineOutput {\n const json = this.toJSON();\n let result = new MachineOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機の出力情報を提供します。 */\nexport interface IMachineOutput extends IErrorOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: MachineItem[] | undefined;\n}\n\n/** 施工機の情報を提供します。 */\nexport class MachineItem implements IMachineItem {\n /** 社番 を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別 ID を取得または設定します。 */\n typeId?: number | undefined;\n /** 施工機種別名を取得または設定します。 */\n typeName?: string | undefined;\n /** 型式 ID を取得または設定します。 */\n modelId?: number | undefined;\n /** 型式名を取得または設定します。 */\n modelName?: string | undefined;\n /** メーカー ID を取得または設定します。 */\n manufacturerId?: number | undefined;\n /** メーカー名 を取得または設定します。 */\n manufacturerName?: string | undefined;\n /** 年式 を取得または設定します。 */\n modelYear?: string | undefined;\n /** CTUあり/なしを取得または設定します。 */\n connectedCtu!: ConnectedCtuType;\n /** CTU ID を取得または設定します。 */\n ctuId?: string | undefined;\n /** 保全 CTU ID を取得または設定します。 */\n maintenanceCtuId?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IMachineItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.typeId = _data[\"typeId\"];\n this.typeName = _data[\"typeName\"];\n this.modelId = _data[\"modelId\"];\n this.modelName = _data[\"modelName\"];\n this.manufacturerId = _data[\"manufacturerId\"];\n this.manufacturerName = _data[\"manufacturerName\"];\n this.modelYear = _data[\"modelYear\"];\n this.connectedCtu = _data[\"connectedCtu\"];\n this.ctuId = _data[\"ctuId\"];\n this.maintenanceCtuId = _data[\"maintenanceCtuId\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): MachineItem {\n data = typeof data === 'object' ? data : {};\n let result = new MachineItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"typeId\"] = this.typeId;\n data[\"typeName\"] = this.typeName;\n data[\"modelId\"] = this.modelId;\n data[\"modelName\"] = this.modelName;\n data[\"manufacturerId\"] = this.manufacturerId;\n data[\"manufacturerName\"] = this.manufacturerName;\n data[\"modelYear\"] = this.modelYear;\n data[\"connectedCtu\"] = this.connectedCtu;\n data[\"ctuId\"] = this.ctuId;\n data[\"maintenanceCtuId\"] = this.maintenanceCtuId;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): MachineItem {\n const json = this.toJSON();\n let result = new MachineItem();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機の情報を提供します。 */\nexport interface IMachineItem {\n /** 社番 を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別 ID を取得または設定します。 */\n typeId?: number | undefined;\n /** 施工機種別名を取得または設定します。 */\n typeName?: string | undefined;\n /** 型式 ID を取得または設定します。 */\n modelId?: number | undefined;\n /** 型式名を取得または設定します。 */\n modelName?: string | undefined;\n /** メーカー ID を取得または設定します。 */\n manufacturerId?: number | undefined;\n /** メーカー名 を取得または設定します。 */\n manufacturerName?: string | undefined;\n /** 年式 を取得または設定します。 */\n modelYear?: string | undefined;\n /** CTUあり/なしを取得または設定します。 */\n connectedCtu: ConnectedCtuType;\n /** CTU ID を取得または設定します。 */\n ctuId?: string | undefined;\n /** 保全 CTU ID を取得または設定します。 */\n maintenanceCtuId?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\nexport enum ConnectedCtuType {\n NotApplicable = 0,\n Connected = 1,\n Disconnected = 2,\n}\n\n/** 施工機の入力情報を提供します。 */\nexport class MachineInput implements IMachineInput {\n /** 施工機情報を取得または設定します。 */\n item?: MachineItem | undefined;\n\n constructor(data?: IMachineInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? MachineItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): MachineInput {\n data = typeof data === 'object' ? data : {};\n let result = new MachineInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): MachineInput {\n const json = this.toJSON();\n let result = new MachineInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機の入力情報を提供します。 */\nexport interface IMachineInput {\n /** 施工機情報を取得または設定します。 */\n item?: MachineItem | undefined;\n}\n\n/** 整備区分の出力情報を提供します。 */\nexport class MaintenanceDivisionOutput extends ErrorOutput implements IMaintenanceDivisionOutput {\n /** 整備区分 リストを取得または設定します。 */\n items?: MaintenanceDivisionItem[] | undefined;\n\n constructor(data?: IMaintenanceDivisionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MaintenanceDivisionItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceDivisionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceDivisionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceDivisionOutput {\n const json = this.toJSON();\n let result = new MaintenanceDivisionOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備区分の出力情報を提供します。 */\nexport interface IMaintenanceDivisionOutput extends IErrorOutput {\n /** 整備区分 リストを取得または設定します。 */\n items?: MaintenanceDivisionItem[] | undefined;\n}\n\n/** 整備区分の情報を提供します。 */\nexport class MaintenanceDivisionItem implements IMaintenanceDivisionItem {\n /** 整備区分 ID を取得または設定します。 */\n id?: number | undefined;\n /** 施工機種別 ID を取得または設定します。 */\n machineTypeId?: number | undefined;\n /** 施工機種別名を取得または設定します。 */\n machineTypeName?: string | undefined;\n /** 整備区分を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IMaintenanceDivisionItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.machineTypeId = _data[\"machineTypeId\"];\n this.machineTypeName = _data[\"machineTypeName\"];\n this.name = _data[\"name\"];\n this.weight = _data[\"weight\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): MaintenanceDivisionItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceDivisionItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"machineTypeId\"] = this.machineTypeId;\n data[\"machineTypeName\"] = this.machineTypeName;\n data[\"name\"] = this.name;\n data[\"weight\"] = this.weight;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): MaintenanceDivisionItem {\n const json = this.toJSON();\n let result = new MaintenanceDivisionItem();\n result.init(json);\n return result;\n }\n}\n\n/** 整備区分の情報を提供します。 */\nexport interface IMaintenanceDivisionItem {\n /** 整備区分 ID を取得または設定します。 */\n id?: number | undefined;\n /** 施工機種別 ID を取得または設定します。 */\n machineTypeId?: number | undefined;\n /** 施工機種別名を取得または設定します。 */\n machineTypeName?: string | undefined;\n /** 整備区分を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 整備区分の入力情報を提供します。 */\nexport class MaintenanceDivisionInput implements IMaintenanceDivisionInput {\n /** 整備区分情報を取得または設定します。 */\n item?: MaintenanceDivisionItem | undefined;\n\n constructor(data?: IMaintenanceDivisionInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? MaintenanceDivisionItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): MaintenanceDivisionInput {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceDivisionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): MaintenanceDivisionInput {\n const json = this.toJSON();\n let result = new MaintenanceDivisionInput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備区分の入力情報を提供します。 */\nexport interface IMaintenanceDivisionInput {\n /** 整備区分情報を取得または設定します。 */\n item?: MaintenanceDivisionItem | undefined;\n}\n\n/** 整備項目の出力情報を提供します。 */\nexport class MaintenanceItemOutput extends ErrorOutput implements IMaintenanceItemOutput {\n /** 点検項目 リストを取得または設定します。 */\n items?: MaintenanceItemItem[] | undefined;\n\n constructor(data?: IMaintenanceItemOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MaintenanceItemItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceItemOutput {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceItemOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceItemOutput {\n const json = this.toJSON();\n let result = new MaintenanceItemOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備項目の出力情報を提供します。 */\nexport interface IMaintenanceItemOutput extends IErrorOutput {\n /** 点検項目 リストを取得または設定します。 */\n items?: MaintenanceItemItem[] | undefined;\n}\n\n/** 整備項目の情報を提供します。 */\nexport class MaintenanceItemItem implements IMaintenanceItemItem {\n /** 整備項目 ID を取得または設定します。 */\n id?: number | undefined;\n /** 整備区分 ID を取得または設定します。 */\n divisionId?: number | undefined;\n /** 整備区分を取得または設定します。 */\n divisionName?: string | undefined;\n /** 施工機種別 ID を取得または設定します。 */\n machineTypeId?: number | undefined;\n /** 施工機種別を取得または設定します。 */\n machineTypeName?: string | undefined;\n /** 整備項目を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** 単位を取得または設定します。 */\n unit?: string | undefined;\n /** 入力値下限を取得または設定します。 */\n inputLowerLimit?: string | undefined;\n /** 入力値上限を取得または設定します。 */\n inputHigherLimit?: string | undefined;\n /** 基準値軽アラーム下限を取得または設定します。 */\n lightAlarmLowerLimit?: string | undefined;\n /** 基準値軽アラーム上限を取得または設定します。 */\n lightAlarmHigherLimit?: string | undefined;\n /** 基準値重アラーム下限を取得または設定します。 */\n heavyAlarmLowerLimit?: string | undefined;\n /** 基準値重アラーム上限を取得または設定します。 */\n heavyAlarmHigherLimit?: string | undefined;\n /** 備考を取得または設定します。 */\n remarks?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IMaintenanceItemItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.divisionId = _data[\"divisionId\"];\n this.divisionName = _data[\"divisionName\"];\n this.machineTypeId = _data[\"machineTypeId\"];\n this.machineTypeName = _data[\"machineTypeName\"];\n this.name = _data[\"name\"];\n this.weight = _data[\"weight\"];\n this.unit = _data[\"unit\"];\n this.inputLowerLimit = _data[\"inputLowerLimit\"];\n this.inputHigherLimit = _data[\"inputHigherLimit\"];\n this.lightAlarmLowerLimit = _data[\"lightAlarmLowerLimit\"];\n this.lightAlarmHigherLimit = _data[\"lightAlarmHigherLimit\"];\n this.heavyAlarmLowerLimit = _data[\"heavyAlarmLowerLimit\"];\n this.heavyAlarmHigherLimit = _data[\"heavyAlarmHigherLimit\"];\n this.remarks = _data[\"remarks\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): MaintenanceItemItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceItemItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"divisionId\"] = this.divisionId;\n data[\"divisionName\"] = this.divisionName;\n data[\"machineTypeId\"] = this.machineTypeId;\n data[\"machineTypeName\"] = this.machineTypeName;\n data[\"name\"] = this.name;\n data[\"weight\"] = this.weight;\n data[\"unit\"] = this.unit;\n data[\"inputLowerLimit\"] = this.inputLowerLimit;\n data[\"inputHigherLimit\"] = this.inputHigherLimit;\n data[\"lightAlarmLowerLimit\"] = this.lightAlarmLowerLimit;\n data[\"lightAlarmHigherLimit\"] = this.lightAlarmHigherLimit;\n data[\"heavyAlarmLowerLimit\"] = this.heavyAlarmLowerLimit;\n data[\"heavyAlarmHigherLimit\"] = this.heavyAlarmHigherLimit;\n data[\"remarks\"] = this.remarks;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): MaintenanceItemItem {\n const json = this.toJSON();\n let result = new MaintenanceItemItem();\n result.init(json);\n return result;\n }\n}\n\n/** 整備項目の情報を提供します。 */\nexport interface IMaintenanceItemItem {\n /** 整備項目 ID を取得または設定します。 */\n id?: number | undefined;\n /** 整備区分 ID を取得または設定します。 */\n divisionId?: number | undefined;\n /** 整備区分を取得または設定します。 */\n divisionName?: string | undefined;\n /** 施工機種別 ID を取得または設定します。 */\n machineTypeId?: number | undefined;\n /** 施工機種別を取得または設定します。 */\n machineTypeName?: string | undefined;\n /** 整備項目を取得または設定します。 */\n name?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** 単位を取得または設定します。 */\n unit?: string | undefined;\n /** 入力値下限を取得または設定します。 */\n inputLowerLimit?: string | undefined;\n /** 入力値上限を取得または設定します。 */\n inputHigherLimit?: string | undefined;\n /** 基準値軽アラーム下限を取得または設定します。 */\n lightAlarmLowerLimit?: string | undefined;\n /** 基準値軽アラーム上限を取得または設定します。 */\n lightAlarmHigherLimit?: string | undefined;\n /** 基準値重アラーム下限を取得または設定します。 */\n heavyAlarmLowerLimit?: string | undefined;\n /** 基準値重アラーム上限を取得または設定します。 */\n heavyAlarmHigherLimit?: string | undefined;\n /** 備考を取得または設定します。 */\n remarks?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 整備項目の入力情報を提供します。 */\nexport class MaintenanceItemInput implements IMaintenanceItemInput {\n /** 整備項目情報を取得または設定します。 */\n item?: MaintenanceItemItem | undefined;\n\n constructor(data?: IMaintenanceItemInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? MaintenanceItemItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): MaintenanceItemInput {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceItemInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): MaintenanceItemInput {\n const json = this.toJSON();\n let result = new MaintenanceItemInput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備項目の入力情報を提供します。 */\nexport interface IMaintenanceItemInput {\n /** 整備項目情報を取得または設定します。 */\n item?: MaintenanceItemItem | undefined;\n}\n\n/** メーカーの出力情報を提供します。 */\nexport class ManufacturerOutput extends ErrorOutput implements IManufacturerOutput {\n /** メーカー リストを取得または設定します。 */\n items?: ManufacturerItem[] | undefined;\n\n constructor(data?: IManufacturerOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(ManufacturerItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): ManufacturerOutput {\n data = typeof data === 'object' ? data : {};\n let result = new ManufacturerOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): ManufacturerOutput {\n const json = this.toJSON();\n let result = new ManufacturerOutput();\n result.init(json);\n return result;\n }\n}\n\n/** メーカーの出力情報を提供します。 */\nexport interface IManufacturerOutput extends IErrorOutput {\n /** メーカー リストを取得または設定します。 */\n items?: ManufacturerItem[] | undefined;\n}\n\n/** メーカーの情報を提供します。 */\nexport class ManufacturerItem implements IManufacturerItem {\n /** メーカー ID を取得または設定します。 */\n id?: number | undefined;\n /** メーカーを取得または設定します。 */\n name?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IManufacturerItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): ManufacturerItem {\n data = typeof data === 'object' ? data : {};\n let result = new ManufacturerItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): ManufacturerItem {\n const json = this.toJSON();\n let result = new ManufacturerItem();\n result.init(json);\n return result;\n }\n}\n\n/** メーカーの情報を提供します。 */\nexport interface IManufacturerItem {\n /** メーカー ID を取得または設定します。 */\n id?: number | undefined;\n /** メーカーを取得または設定します。 */\n name?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** メーカーの入力情報を提供します。 */\nexport class ManufacturerInput implements IManufacturerInput {\n /** メーカー情報を取得または設定します。 */\n item?: ManufacturerItem | undefined;\n\n constructor(data?: IManufacturerInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? ManufacturerItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): ManufacturerInput {\n data = typeof data === 'object' ? data : {};\n let result = new ManufacturerInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): ManufacturerInput {\n const json = this.toJSON();\n let result = new ManufacturerInput();\n result.init(json);\n return result;\n }\n}\n\n/** メーカーの入力情報を提供します。 */\nexport interface IManufacturerInput {\n /** メーカー情報を取得または設定します。 */\n item?: ManufacturerItem | undefined;\n}\n\n/** 工法の出力情報を提供します。 */\nexport class MethodOutput extends ErrorOutput implements IMethodOutput {\n /** 工法 リストを取得または設定します。 */\n items?: MethodItem[] | undefined;\n\n constructor(data?: IMethodOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MethodItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MethodOutput {\n data = typeof data === 'object' ? data : {};\n let result = new MethodOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MethodOutput {\n const json = this.toJSON();\n let result = new MethodOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 工法の出力情報を提供します。 */\nexport interface IMethodOutput extends IErrorOutput {\n /** 工法 リストを取得または設定します。 */\n items?: MethodItem[] | undefined;\n}\n\n/** 型式の情報を提供します。 */\nexport class MethodItem implements IMethodItem {\n /** 工法 ID を取得または設定します。 */\n id?: number | undefined;\n /** 工法を取得または設定します。 */\n name?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IMethodItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): MethodItem {\n data = typeof data === 'object' ? data : {};\n let result = new MethodItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): MethodItem {\n const json = this.toJSON();\n let result = new MethodItem();\n result.init(json);\n return result;\n }\n}\n\n/** 型式の情報を提供します。 */\nexport interface IMethodItem {\n /** 工法 ID を取得または設定します。 */\n id?: number | undefined;\n /** 工法を取得または設定します。 */\n name?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 工法の入力情報を提供します。 */\nexport class MethodInput implements IMethodInput {\n /** 型式情報を取得または設定します。 */\n item?: MethodItem | undefined;\n\n constructor(data?: IMethodInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? MethodItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): MethodInput {\n data = typeof data === 'object' ? data : {};\n let result = new MethodInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): MethodInput {\n const json = this.toJSON();\n let result = new MethodInput();\n result.init(json);\n return result;\n }\n}\n\n/** 工法の入力情報を提供します。 */\nexport interface IMethodInput {\n /** 型式情報を取得または設定します。 */\n item?: MethodItem | undefined;\n}\n\n/** 型式の出力情報を提供します。 */\nexport class ModelOutput extends ErrorOutput implements IModelOutput {\n /** 型式 リストを取得または設定します。 */\n items?: ModelItem[] | undefined;\n\n constructor(data?: IModelOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(ModelItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): ModelOutput {\n data = typeof data === 'object' ? data : {};\n let result = new ModelOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): ModelOutput {\n const json = this.toJSON();\n let result = new ModelOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 型式の出力情報を提供します。 */\nexport interface IModelOutput extends IErrorOutput {\n /** 型式 リストを取得または設定します。 */\n items?: ModelItem[] | undefined;\n}\n\n/** 型式の情報を提供します。 */\nexport class ModelItem implements IModelItem {\n /** 型式 ID を取得または設定します。 */\n id?: number | undefined;\n /** 型式を取得または設定します。 */\n name?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IModelItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): ModelItem {\n data = typeof data === 'object' ? data : {};\n let result = new ModelItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): ModelItem {\n const json = this.toJSON();\n let result = new ModelItem();\n result.init(json);\n return result;\n }\n}\n\n/** 型式の情報を提供します。 */\nexport interface IModelItem {\n /** 型式 ID を取得または設定します。 */\n id?: number | undefined;\n /** 型式を取得または設定します。 */\n name?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 型式の入力情報を提供します。 */\nexport class ModelInput implements IModelInput {\n /** 型式情報を取得または設定します。 */\n item?: ModelItem | undefined;\n\n constructor(data?: IModelInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? ModelItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): ModelInput {\n data = typeof data === 'object' ? data : {};\n let result = new ModelInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): ModelInput {\n const json = this.toJSON();\n let result = new ModelInput();\n result.init(json);\n return result;\n }\n}\n\n/** 型式の入力情報を提供します。 */\nexport interface IModelInput {\n /** 型式情報を取得または設定します。 */\n item?: ModelItem | undefined;\n}\n\n/** 特記事項マスタの出力情報を提供します。 */\nexport class RemarksOutput extends ErrorOutput implements IRemarksOutput {\n /** 特記事項リストを取得または設定します。 */\n items?: RemarksItem[] | undefined;\n\n constructor(data?: IRemarksOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(RemarksItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): RemarksOutput {\n data = typeof data === 'object' ? data : {};\n let result = new RemarksOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): RemarksOutput {\n const json = this.toJSON();\n let result = new RemarksOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 特記事項マスタの出力情報を提供します。 */\nexport interface IRemarksOutput extends IErrorOutput {\n /** 特記事項リストを取得または設定します。 */\n items?: RemarksItem[] | undefined;\n}\n\n/** 特記事項の情報を提供します。 */\nexport class RemarksItem implements IRemarksItem {\n /** 年式 ID を取得または設定します。 */\n remarksId?: number | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType?: MachineType | undefined;\n /** タイトルを取得または設定します。 */\n title?: string | undefined;\n /** 項目を取得または設定します。 */\n item?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IRemarksItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.remarksId = _data[\"remarksId\"];\n this.machineType = _data[\"machineType\"];\n this.title = _data[\"title\"];\n this.item = _data[\"item\"];\n this.weight = _data[\"weight\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): RemarksItem {\n data = typeof data === 'object' ? data : {};\n let result = new RemarksItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"remarksId\"] = this.remarksId;\n data[\"machineType\"] = this.machineType;\n data[\"title\"] = this.title;\n data[\"item\"] = this.item;\n data[\"weight\"] = this.weight;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): RemarksItem {\n const json = this.toJSON();\n let result = new RemarksItem();\n result.init(json);\n return result;\n }\n}\n\n/** 特記事項の情報を提供します。 */\nexport interface IRemarksItem {\n /** 年式 ID を取得または設定します。 */\n remarksId?: number | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType?: MachineType | undefined;\n /** タイトルを取得または設定します。 */\n title?: string | undefined;\n /** 項目を取得または設定します。 */\n item?: string | undefined;\n /** 重みを取得または設定します。 */\n weight?: number | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** 特記事項マスタの入力情報を提供します。 */\nexport class RemarksInput implements IRemarksInput {\n /** 特記事項の情報を取得または設定します。 */\n item?: RemarksItem | undefined;\n\n constructor(data?: IRemarksInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? RemarksItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): RemarksInput {\n data = typeof data === 'object' ? data : {};\n let result = new RemarksInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): RemarksInput {\n const json = this.toJSON();\n let result = new RemarksInput();\n result.init(json);\n return result;\n }\n}\n\n/** 特記事項マスタの入力情報を提供します。 */\nexport interface IRemarksInput {\n /** 特記事項の情報を取得または設定します。 */\n item?: RemarksItem | undefined;\n}\n\n/** ユーザーの出力情報を提供します。 */\nexport class UserOutput extends ErrorOutput implements IUserOutput {\n /** ユーザー リストを取得または設定します。 */\n items?: UserItem[] | undefined;\n\n constructor(data?: IUserOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(UserItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): UserOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UserOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): UserOutput {\n const json = this.toJSON();\n let result = new UserOutput();\n result.init(json);\n return result;\n }\n}\n\n/** ユーザーの出力情報を提供します。 */\nexport interface IUserOutput extends IErrorOutput {\n /** ユーザー リストを取得または設定します。 */\n items?: UserItem[] | undefined;\n}\n\n/** ユーザーの情報を提供します。 */\nexport class UserItem implements IUserItem {\n /** ユーザー ID を取得または設定します。 */\n oldId?: string | undefined;\n /** ユーザー ID を取得または設定します。 */\n newId?: string | undefined;\n /** ユーザー名を取得または設定します。 */\n name?: string | undefined;\n /** 検印名を取得または設定します。 */\n inspectorName?: string | undefined;\n /** パスワードを取得または設定します。 */\n password?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n\n constructor(data?: IUserItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.oldId = _data[\"oldId\"];\n this.newId = _data[\"newId\"];\n this.name = _data[\"name\"];\n this.inspectorName = _data[\"inspectorName\"];\n this.password = _data[\"password\"];\n this.lockVersion = _data[\"lockVersion\"];\n }\n }\n\n static fromJS(data: any): UserItem {\n data = typeof data === 'object' ? data : {};\n let result = new UserItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"oldId\"] = this.oldId;\n data[\"newId\"] = this.newId;\n data[\"name\"] = this.name;\n data[\"inspectorName\"] = this.inspectorName;\n data[\"password\"] = this.password;\n data[\"lockVersion\"] = this.lockVersion;\n return data; \n }\n\n clone(): UserItem {\n const json = this.toJSON();\n let result = new UserItem();\n result.init(json);\n return result;\n }\n}\n\n/** ユーザーの情報を提供します。 */\nexport interface IUserItem {\n /** ユーザー ID を取得または設定します。 */\n oldId?: string | undefined;\n /** ユーザー ID を取得または設定します。 */\n newId?: string | undefined;\n /** ユーザー名を取得または設定します。 */\n name?: string | undefined;\n /** 検印名を取得または設定します。 */\n inspectorName?: string | undefined;\n /** パスワードを取得または設定します。 */\n password?: string | undefined;\n /** ロック バージョンを取得または設定します。 */\n lockVersion?: number | undefined;\n}\n\n/** ユーザーの入力情報を提供します。 */\nexport class UserInput implements IUserInput {\n /** 型式情報を取得または設定します。 */\n item?: UserItem | undefined;\n\n constructor(data?: IUserInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.item = _data[\"item\"] ? UserItem.fromJS(_data[\"item\"]) : undefined;\n }\n }\n\n static fromJS(data: any): UserInput {\n data = typeof data === 'object' ? data : {};\n let result = new UserInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"item\"] = this.item ? this.item.toJSON() : undefined;\n return data; \n }\n\n clone(): UserInput {\n const json = this.toJSON();\n let result = new UserInput();\n result.init(json);\n return result;\n }\n}\n\n/** ユーザーの入力情報を提供します。 */\nexport interface IUserInput {\n /** 型式情報を取得または設定します。 */\n item?: UserItem | undefined;\n}\n\n/** 現場完了点検記録の出力情報を提供します。 */\nexport class GetCompletionInspectionRecordOutput extends ErrorOutput implements IGetCompletionInspectionRecordOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: CompletionInspectionRecordItem[] | undefined;\n\n constructor(data?: IGetCompletionInspectionRecordOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(CompletionInspectionRecordItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetCompletionInspectionRecordOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCompletionInspectionRecordOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCompletionInspectionRecordOutput {\n const json = this.toJSON();\n let result = new GetCompletionInspectionRecordOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検記録の出力情報を提供します。 */\nexport interface IGetCompletionInspectionRecordOutput extends IErrorOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: CompletionInspectionRecordItem[] | undefined;\n}\n\n/** 現場完了点検記録の 1 項目分の情報を提供します。 */\nexport class CompletionInspectionRecordItem implements ICompletionInspectionRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 点検日を取得または設定します。 */\n inspectionAt!: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId!: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected!: boolean;\n\n constructor(data?: ICompletionInspectionRecordItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.inspectionAt = _data[\"inspectionAt\"];\n this.method = _data[\"method\"];\n this.areaId = _data[\"areaId\"];\n this.site = _data[\"site\"];\n this.worker = _data[\"worker\"];\n this.report = _data[\"report\"];\n this.isInspected = _data[\"isInspected\"];\n }\n }\n\n static fromJS(data: any): CompletionInspectionRecordItem {\n data = typeof data === 'object' ? data : {};\n let result = new CompletionInspectionRecordItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"inspectionAt\"] = this.inspectionAt;\n data[\"method\"] = this.method;\n data[\"areaId\"] = this.areaId;\n data[\"site\"] = this.site;\n data[\"worker\"] = this.worker;\n data[\"report\"] = this.report;\n data[\"isInspected\"] = this.isInspected;\n return data; \n }\n\n clone(): CompletionInspectionRecordItem {\n const json = this.toJSON();\n let result = new CompletionInspectionRecordItem();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検記録の 1 項目分の情報を提供します。 */\nexport interface ICompletionInspectionRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 点検日を取得または設定します。 */\n inspectionAt: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected: boolean;\n}\n\n/** 現場完了点検記録の取得に必要な入力情報を提供します。 */\nexport class GetCompletionInspectionRecordInput implements IGetCompletionInspectionRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType!: CompletionInspectionRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n\n constructor(data?: IGetCompletionInspectionRecordInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n this.searchType = _data[\"searchType\"];\n this.searchWord = _data[\"searchWord\"];\n this.isInspected = _data[\"isInspected\"];\n this.searchBeginAt = _data[\"searchBeginAt\"];\n this.searchEndAt = _data[\"searchEndAt\"];\n }\n }\n\n static fromJS(data: any): GetCompletionInspectionRecordInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCompletionInspectionRecordInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n data[\"searchType\"] = this.searchType;\n data[\"searchWord\"] = this.searchWord;\n data[\"isInspected\"] = this.isInspected;\n data[\"searchBeginAt\"] = this.searchBeginAt;\n data[\"searchEndAt\"] = this.searchEndAt;\n return data; \n }\n\n clone(): GetCompletionInspectionRecordInput {\n const json = this.toJSON();\n let result = new GetCompletionInspectionRecordInput();\n result.init(json);\n return result;\n }\n}\n\n/** 現場完了点検記録の取得に必要な入力情報を提供します。 */\nexport interface IGetCompletionInspectionRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType: CompletionInspectionRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n}\n\n/** 現場完了点検記録の検索種別を表す列挙値を提供します。 */\nexport enum CompletionInspectionRecordSearchType {\n None = 0,\n Site = 1,\n Worker = 2,\n Report = 3,\n}\n\n/** 日常点検記録の出力情報を提供します。 */\nexport class GetDailyInspectionRecordOutput extends ErrorOutput implements IGetDailyInspectionRecordOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: DailyInspectionRecordItem[] | undefined;\n\n constructor(data?: IGetDailyInspectionRecordOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(DailyInspectionRecordItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetDailyInspectionRecordOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDailyInspectionRecordOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetDailyInspectionRecordOutput {\n const json = this.toJSON();\n let result = new GetDailyInspectionRecordOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検記録の出力情報を提供します。 */\nexport interface IGetDailyInspectionRecordOutput extends IErrorOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: DailyInspectionRecordItem[] | undefined;\n}\n\n/** 日常点検記録の 1 項目分の情報を提供します。 */\nexport class DailyInspectionRecordItem implements IDailyInspectionRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 点検日を取得または設定します。 */\n inspectionAt!: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId!: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected!: boolean;\n\n constructor(data?: IDailyInspectionRecordItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.inspectionAt = _data[\"inspectionAt\"];\n this.method = _data[\"method\"];\n this.areaId = _data[\"areaId\"];\n this.site = _data[\"site\"];\n this.worker = _data[\"worker\"];\n this.report = _data[\"report\"];\n this.isInspected = _data[\"isInspected\"];\n }\n }\n\n static fromJS(data: any): DailyInspectionRecordItem {\n data = typeof data === 'object' ? data : {};\n let result = new DailyInspectionRecordItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"inspectionAt\"] = this.inspectionAt;\n data[\"method\"] = this.method;\n data[\"areaId\"] = this.areaId;\n data[\"site\"] = this.site;\n data[\"worker\"] = this.worker;\n data[\"report\"] = this.report;\n data[\"isInspected\"] = this.isInspected;\n return data; \n }\n\n clone(): DailyInspectionRecordItem {\n const json = this.toJSON();\n let result = new DailyInspectionRecordItem();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検記録の 1 項目分の情報を提供します。 */\nexport interface IDailyInspectionRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 点検日を取得または設定します。 */\n inspectionAt: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected: boolean;\n}\n\n/** 日常点検記録の取得に必要な入力情報を提供します。 */\nexport class GetDailyInspectionRecordInput implements IGetDailyInspectionRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType!: DailyInspectionRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n\n constructor(data?: IGetDailyInspectionRecordInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n this.searchType = _data[\"searchType\"];\n this.searchWord = _data[\"searchWord\"];\n this.isInspected = _data[\"isInspected\"];\n this.searchBeginAt = _data[\"searchBeginAt\"];\n this.searchEndAt = _data[\"searchEndAt\"];\n }\n }\n\n static fromJS(data: any): GetDailyInspectionRecordInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDailyInspectionRecordInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n data[\"searchType\"] = this.searchType;\n data[\"searchWord\"] = this.searchWord;\n data[\"isInspected\"] = this.isInspected;\n data[\"searchBeginAt\"] = this.searchBeginAt;\n data[\"searchEndAt\"] = this.searchEndAt;\n return data; \n }\n\n clone(): GetDailyInspectionRecordInput {\n const json = this.toJSON();\n let result = new GetDailyInspectionRecordInput();\n result.init(json);\n return result;\n }\n}\n\n/** 日常点検記録の取得に必要な入力情報を提供します。 */\nexport interface IGetDailyInspectionRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType: DailyInspectionRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n}\n\n/** 日常点検記録の検索種別を表す列挙値を提供します。 */\nexport enum DailyInspectionRecordSearchType {\n None = 0,\n Site = 1,\n Worker = 2,\n Report = 3,\n}\n\n/** 施工機エラー履歴の出力情報を提供します。 */\nexport class GetMachineErrorHistoryOutput extends ErrorOutput implements IGetMachineErrorHistoryOutput {\n /** 施工機エラー履歴を取得または設定します。 */\n items?: MachineErrorHistoryItem[] | undefined;\n /** 施工機エラー履歴の日別発生数を取得または設定します。 */\n counts?: KeyValuePairOfDateTimeAndInteger[] | undefined;\n\n constructor(data?: IGetMachineErrorHistoryOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineErrorHistoryItem.fromJS(item));\n }\n if (Array.isArray(_data[\"counts\"])) {\n this.counts = [] as any;\n for (let item of _data[\"counts\"])\n this.counts!.push(KeyValuePairOfDateTimeAndInteger.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMachineErrorHistoryOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineErrorHistoryOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n if (Array.isArray(this.counts)) {\n data[\"counts\"] = [];\n for (let item of this.counts)\n data[\"counts\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMachineErrorHistoryOutput {\n const json = this.toJSON();\n let result = new GetMachineErrorHistoryOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機エラー履歴の出力情報を提供します。 */\nexport interface IGetMachineErrorHistoryOutput extends IErrorOutput {\n /** 施工機エラー履歴を取得または設定します。 */\n items?: MachineErrorHistoryItem[] | undefined;\n /** 施工機エラー履歴の日別発生数を取得または設定します。 */\n counts?: KeyValuePairOfDateTimeAndInteger[] | undefined;\n}\n\n/** 施工機エラー履歴の情報を提供します。 */\nexport class MachineErrorHistoryItem implements IMachineErrorHistoryItem {\n /** エラー発生日時を取得または設定します。 */\n errorOccurredAt!: string;\n /** エラー内容 を取得または設定します。 */\n errorContent?: string | undefined;\n\n constructor(data?: IMachineErrorHistoryItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.errorOccurredAt = _data[\"errorOccurredAt\"];\n this.errorContent = _data[\"errorContent\"];\n }\n }\n\n static fromJS(data: any): MachineErrorHistoryItem {\n data = typeof data === 'object' ? data : {};\n let result = new MachineErrorHistoryItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"errorOccurredAt\"] = this.errorOccurredAt;\n data[\"errorContent\"] = this.errorContent;\n return data; \n }\n\n clone(): MachineErrorHistoryItem {\n const json = this.toJSON();\n let result = new MachineErrorHistoryItem();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機エラー履歴の情報を提供します。 */\nexport interface IMachineErrorHistoryItem {\n /** エラー発生日時を取得または設定します。 */\n errorOccurredAt: string;\n /** エラー内容 を取得または設定します。 */\n errorContent?: string | undefined;\n}\n\nexport class KeyValuePairOfDateTimeAndInteger implements IKeyValuePairOfDateTimeAndInteger {\n key!: string;\n value!: number;\n\n constructor(data?: IKeyValuePairOfDateTimeAndInteger) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValuePairOfDateTimeAndInteger {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValuePairOfDateTimeAndInteger();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValuePairOfDateTimeAndInteger {\n const json = this.toJSON();\n let result = new KeyValuePairOfDateTimeAndInteger();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValuePairOfDateTimeAndInteger {\n key: string;\n value: number;\n}\n\n/** 施工機エラー履歴の取得に必要な入力情報を提供します。 */\nexport class GetMachineErrorHistoryInput implements IGetMachineErrorHistoryInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 検索開始日時を取得または設定します。 */\n beginAt?: string | undefined;\n /** 検索終了日時を取得または設定します。 */\n endAt?: string | undefined;\n\n constructor(data?: IGetMachineErrorHistoryInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.beginAt = _data[\"beginAt\"];\n this.endAt = _data[\"endAt\"];\n }\n }\n\n static fromJS(data: any): GetMachineErrorHistoryInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineErrorHistoryInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"beginAt\"] = this.beginAt;\n data[\"endAt\"] = this.endAt;\n return data; \n }\n\n clone(): GetMachineErrorHistoryInput {\n const json = this.toJSON();\n let result = new GetMachineErrorHistoryInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機エラー履歴の取得に必要な入力情報を提供します。 */\nexport interface IGetMachineErrorHistoryInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 検索開始日時を取得または設定します。 */\n beginAt?: string | undefined;\n /** 検索終了日時を取得または設定します。 */\n endAt?: string | undefined;\n}\n\n/** 施工機モニタ―の出力情報を提供します。 */\nexport class GetMachineMonitoringOutput extends ErrorOutput implements IGetMachineMonitoringOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: MachineMonitoringItem[] | undefined;\n\n constructor(data?: IGetMachineMonitoringOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineMonitoringItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMachineMonitoringOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineMonitoringOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMachineMonitoringOutput {\n const json = this.toJSON();\n let result = new GetMachineMonitoringOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機モニタ―の出力情報を提供します。 */\nexport interface IGetMachineMonitoringOutput extends IErrorOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: MachineMonitoringItem[] | undefined;\n}\n\n/** 施工機モニターの 1 項目分の情報を提供します。 */\nexport class MachineMonitoringItem implements IMachineMonitoringItem {\n /** 施工機リストの情報を取得または設定します。 */\n machines?: KeyValueItemOfMachineTypeAndMachineItem[] | undefined;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 報告事項を取得または設定します。 */\n reportItem?: string | undefined;\n /** ロックされているかどうかを表す値を取得または設定します。 */\n isLock!: boolean;\n /** エリア ID を取得または設定します。 */\n areaId?: AreaType | undefined;\n /** タブレット ID を取得または設定します。 */\n tabletId?: string | undefined;\n /** CTU エラーを取得または設定します。 */\n ctuError?: string | undefined;\n /** タブレットの接続状況を取得または設定します。 */\n isConectedTablet!: boolean;\n /** 特定自主検査後日数を取得または設定します。 */\n selfInspection?: string | undefined;\n\n constructor(data?: IMachineMonitoringItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"machines\"])) {\n this.machines = [] as any;\n for (let item of _data[\"machines\"])\n this.machines!.push(KeyValueItemOfMachineTypeAndMachineItem.fromJS(item));\n }\n this.site = _data[\"site\"];\n this.reportItem = _data[\"reportItem\"];\n this.isLock = _data[\"isLock\"];\n this.areaId = _data[\"areaId\"];\n this.tabletId = _data[\"tabletId\"];\n this.ctuError = _data[\"ctuError\"];\n this.isConectedTablet = _data[\"isConectedTablet\"];\n this.selfInspection = _data[\"selfInspection\"];\n }\n }\n\n static fromJS(data: any): MachineMonitoringItem {\n data = typeof data === 'object' ? data : {};\n let result = new MachineMonitoringItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.machines)) {\n data[\"machines\"] = [];\n for (let item of this.machines)\n data[\"machines\"].push(item.toJSON());\n }\n data[\"site\"] = this.site;\n data[\"reportItem\"] = this.reportItem;\n data[\"isLock\"] = this.isLock;\n data[\"areaId\"] = this.areaId;\n data[\"tabletId\"] = this.tabletId;\n data[\"ctuError\"] = this.ctuError;\n data[\"isConectedTablet\"] = this.isConectedTablet;\n data[\"selfInspection\"] = this.selfInspection;\n return data; \n }\n\n clone(): MachineMonitoringItem {\n const json = this.toJSON();\n let result = new MachineMonitoringItem();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機モニターの 1 項目分の情報を提供します。 */\nexport interface IMachineMonitoringItem {\n /** 施工機リストの情報を取得または設定します。 */\n machines?: KeyValueItemOfMachineTypeAndMachineItem[] | undefined;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 報告事項を取得または設定します。 */\n reportItem?: string | undefined;\n /** ロックされているかどうかを表す値を取得または設定します。 */\n isLock: boolean;\n /** エリア ID を取得または設定します。 */\n areaId?: AreaType | undefined;\n /** タブレット ID を取得または設定します。 */\n tabletId?: string | undefined;\n /** CTU エラーを取得または設定します。 */\n ctuError?: string | undefined;\n /** タブレットの接続状況を取得または設定します。 */\n isConectedTablet: boolean;\n /** 特定自主検査後日数を取得または設定します。 */\n selfInspection?: string | undefined;\n}\n\nexport class KeyValueItemOfMachineTypeAndMachineItem implements IKeyValueItemOfMachineTypeAndMachineItem {\n key!: MachineType;\n value?: MachineItem2 | undefined;\n\n constructor(data?: IKeyValueItemOfMachineTypeAndMachineItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? MachineItem2.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfMachineTypeAndMachineItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfMachineTypeAndMachineItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfMachineTypeAndMachineItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfMachineTypeAndMachineItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfMachineTypeAndMachineItem {\n key: MachineType;\n value?: MachineItem2 | undefined;\n}\n\n/** 施工機 1 機分の情報を提供します。 */\nexport class MachineItem2 implements IMachineItem2 {\n /** ベース マシンの施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** メーカーを取得または設定します。 */\n manufacturer?: string | undefined;\n /** 型式を取得または設定します。 */\n model?: string | undefined;\n /** CTUあり/なしを取得または設定します。 */\n connectedCtu!: ConnectedCtuType;\n /** CTU ID を取得または設定します。 */\n ctuId?: string | undefined;\n /** 保全 CTU ID を取得または設定します。 */\n maintenanceCtuId?: string | undefined;\n\n constructor(data?: IMachineItem2) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.manufacturer = _data[\"manufacturer\"];\n this.model = _data[\"model\"];\n this.connectedCtu = _data[\"connectedCtu\"];\n this.ctuId = _data[\"ctuId\"];\n this.maintenanceCtuId = _data[\"maintenanceCtuId\"];\n }\n }\n\n static fromJS(data: any): MachineItem2 {\n data = typeof data === 'object' ? data : {};\n let result = new MachineItem2();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"manufacturer\"] = this.manufacturer;\n data[\"model\"] = this.model;\n data[\"connectedCtu\"] = this.connectedCtu;\n data[\"ctuId\"] = this.ctuId;\n data[\"maintenanceCtuId\"] = this.maintenanceCtuId;\n return data; \n }\n\n clone(): MachineItem2 {\n const json = this.toJSON();\n let result = new MachineItem2();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機 1 機分の情報を提供します。 */\nexport interface IMachineItem2 {\n /** ベース マシンの施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** メーカーを取得または設定します。 */\n manufacturer?: string | undefined;\n /** 型式を取得または設定します。 */\n model?: string | undefined;\n /** CTUあり/なしを取得または設定します。 */\n connectedCtu: ConnectedCtuType;\n /** CTU ID を取得または設定します。 */\n ctuId?: string | undefined;\n /** 保全 CTU ID を取得または設定します。 */\n maintenanceCtuId?: string | undefined;\n}\n\nexport enum AreaType {\n East = 1,\n West = 2,\n}\n\n/** 施工機モニタ―の取得に必要な入力情報を提供します。 */\nexport class GetMachineMonitoringInput implements IGetMachineMonitoringInput {\n /** 検索種別を取得または設定します。 */\n searchType!: MachineMonitoringSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検索する作業場所を取得または設定します。 */\n searchSite?: string | undefined;\n /** 検索する報告事項を取得または設定します。 */\n searchReportItem?: string | undefined;\n\n constructor(data?: IGetMachineMonitoringInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.searchType = _data[\"searchType\"];\n this.searchWord = _data[\"searchWord\"];\n this.searchSite = _data[\"searchSite\"];\n this.searchReportItem = _data[\"searchReportItem\"];\n }\n }\n\n static fromJS(data: any): GetMachineMonitoringInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineMonitoringInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"searchType\"] = this.searchType;\n data[\"searchWord\"] = this.searchWord;\n data[\"searchSite\"] = this.searchSite;\n data[\"searchReportItem\"] = this.searchReportItem;\n return data; \n }\n\n clone(): GetMachineMonitoringInput {\n const json = this.toJSON();\n let result = new GetMachineMonitoringInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機モニタ―の取得に必要な入力情報を提供します。 */\nexport interface IGetMachineMonitoringInput {\n /** 検索種別を取得または設定します。 */\n searchType: MachineMonitoringSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検索する作業場所を取得または設定します。 */\n searchSite?: string | undefined;\n /** 検索する報告事項を取得または設定します。 */\n searchReportItem?: string | undefined;\n}\n\n/** 施工機モニタ―の検索種別を表す列挙値を提供します。 */\nexport enum MachineMonitoringSearchType {\n None = 0,\n BaseMachineId = 1,\n AugerMachineId = 2,\n LiftMachineId = 3,\n}\n\n/** 施工機モニタ―のアンロックの出力情報を提供します。 */\nexport class UnlockMachineMonitoringOutput extends ErrorOutput implements IUnlockMachineMonitoringOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: MachineMonitoringItem[] | undefined;\n\n constructor(data?: IUnlockMachineMonitoringOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineMonitoringItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): UnlockMachineMonitoringOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UnlockMachineMonitoringOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): UnlockMachineMonitoringOutput {\n const json = this.toJSON();\n let result = new UnlockMachineMonitoringOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機モニタ―のアンロックの出力情報を提供します。 */\nexport interface IUnlockMachineMonitoringOutput extends IErrorOutput {\n /** 施工機 リストを取得または設定します。 */\n items?: MachineMonitoringItem[] | undefined;\n}\n\n/** 施工機モニタ―のアンロックに必要な入力情報を提供します。 */\nexport class UnlockMachineMonitoringInput implements IUnlockMachineMonitoringInput {\n /** タブレット ID を取得または設定します。 */\n tabletId?: string | undefined;\n\n constructor(data?: IUnlockMachineMonitoringInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.tabletId = _data[\"tabletId\"];\n }\n }\n\n static fromJS(data: any): UnlockMachineMonitoringInput {\n data = typeof data === 'object' ? data : {};\n let result = new UnlockMachineMonitoringInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"tabletId\"] = this.tabletId;\n return data; \n }\n\n clone(): UnlockMachineMonitoringInput {\n const json = this.toJSON();\n let result = new UnlockMachineMonitoringInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機モニタ―のアンロックに必要な入力情報を提供します。 */\nexport interface IUnlockMachineMonitoringInput {\n /** タブレット ID を取得または設定します。 */\n tabletId?: string | undefined;\n}\n\n/** 施工機履歴の出力情報を提供します。 */\nexport class GetMachineOperationHistoryOutput extends ErrorOutput implements IGetMachineOperationHistoryOutput {\n /** 施工履歴を取得または設定します。 */\n items?: MachineOperationHistoryItem[] | undefined;\n\n constructor(data?: IGetMachineOperationHistoryOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineOperationHistoryItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMachineOperationHistoryOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineOperationHistoryOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMachineOperationHistoryOutput {\n const json = this.toJSON();\n let result = new GetMachineOperationHistoryOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機履歴の出力情報を提供します。 */\nexport interface IGetMachineOperationHistoryOutput extends IErrorOutput {\n /** 施工履歴を取得または設定します。 */\n items?: MachineOperationHistoryItem[] | undefined;\n}\n\n/** 施工機稼働履歴の情報を提供します。 */\nexport class MachineOperationHistoryItem implements IMachineOperationHistoryItem {\n /** 登録日時を取得または設定します。 */\n registerAt!: string;\n /** エンジン稼働時間を取得または設定します。 */\n engineOperatingTime?: string | undefined;\n /** 昇降距離を取得または設定します。 */\n liftingDistance?: string | undefined;\n /** オーガー回転時間を取得または設定します。 */\n augerRotationTime?: string | undefined;\n /** エンジン回転時間の平均値を取得または設定します。 */\n engineRotationTimeAvg?: string | undefined;\n /** バッテリー電圧の平均値を取得または設定します。 */\n batteryVoltageAvg?: string | undefined;\n /** 昇降圧力の最大値を取得または設定します。 */\n liftingPressureMax?: string | undefined;\n /** 作業油温の平均値を取得または設定します。 */\n oilTemperatureAvg?: string | undefined;\n /** エラー名称を取得または設定します。 */\n errors?: string[] | undefined;\n\n constructor(data?: IMachineOperationHistoryItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.registerAt = _data[\"registerAt\"];\n this.engineOperatingTime = _data[\"engineOperatingTime\"];\n this.liftingDistance = _data[\"liftingDistance\"];\n this.augerRotationTime = _data[\"augerRotationTime\"];\n this.engineRotationTimeAvg = _data[\"engineRotationTimeAvg\"];\n this.batteryVoltageAvg = _data[\"batteryVoltageAvg\"];\n this.liftingPressureMax = _data[\"liftingPressureMax\"];\n this.oilTemperatureAvg = _data[\"oilTemperatureAvg\"];\n if (Array.isArray(_data[\"errors\"])) {\n this.errors = [] as any;\n for (let item of _data[\"errors\"])\n this.errors!.push(item);\n }\n }\n }\n\n static fromJS(data: any): MachineOperationHistoryItem {\n data = typeof data === 'object' ? data : {};\n let result = new MachineOperationHistoryItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"registerAt\"] = this.registerAt;\n data[\"engineOperatingTime\"] = this.engineOperatingTime;\n data[\"liftingDistance\"] = this.liftingDistance;\n data[\"augerRotationTime\"] = this.augerRotationTime;\n data[\"engineRotationTimeAvg\"] = this.engineRotationTimeAvg;\n data[\"batteryVoltageAvg\"] = this.batteryVoltageAvg;\n data[\"liftingPressureMax\"] = this.liftingPressureMax;\n data[\"oilTemperatureAvg\"] = this.oilTemperatureAvg;\n if (Array.isArray(this.errors)) {\n data[\"errors\"] = [];\n for (let item of this.errors)\n data[\"errors\"].push(item);\n }\n return data; \n }\n\n clone(): MachineOperationHistoryItem {\n const json = this.toJSON();\n let result = new MachineOperationHistoryItem();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機稼働履歴の情報を提供します。 */\nexport interface IMachineOperationHistoryItem {\n /** 登録日時を取得または設定します。 */\n registerAt: string;\n /** エンジン稼働時間を取得または設定します。 */\n engineOperatingTime?: string | undefined;\n /** 昇降距離を取得または設定します。 */\n liftingDistance?: string | undefined;\n /** オーガー回転時間を取得または設定します。 */\n augerRotationTime?: string | undefined;\n /** エンジン回転時間の平均値を取得または設定します。 */\n engineRotationTimeAvg?: string | undefined;\n /** バッテリー電圧の平均値を取得または設定します。 */\n batteryVoltageAvg?: string | undefined;\n /** 昇降圧力の最大値を取得または設定します。 */\n liftingPressureMax?: string | undefined;\n /** 作業油温の平均値を取得または設定します。 */\n oilTemperatureAvg?: string | undefined;\n /** エラー名称を取得または設定します。 */\n errors?: string[] | undefined;\n}\n\n/** 施工履歴の取得に必要な入力情報を提供します。 */\nexport class GetMachineOperationHistoryInput implements IGetMachineOperationHistoryInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 検索開始日時を取得または設定します。 */\n beginAt?: string | undefined;\n /** 検索終了日時を取得または設定します。 */\n endAt?: string | undefined;\n\n constructor(data?: IGetMachineOperationHistoryInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.beginAt = _data[\"beginAt\"];\n this.endAt = _data[\"endAt\"];\n }\n }\n\n static fromJS(data: any): GetMachineOperationHistoryInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineOperationHistoryInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"beginAt\"] = this.beginAt;\n data[\"endAt\"] = this.endAt;\n return data; \n }\n\n clone(): GetMachineOperationHistoryInput {\n const json = this.toJSON();\n let result = new GetMachineOperationHistoryInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工履歴の取得に必要な入力情報を提供します。 */\nexport interface IGetMachineOperationHistoryInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 検索開始日時を取得または設定します。 */\n beginAt?: string | undefined;\n /** 検索終了日時を取得または設定します。 */\n endAt?: string | undefined;\n}\n\n/** 施工機ステータスの取得に必要な入力情報を提供します。 */\nexport class GetMachineStatusMonitoringOutput extends ErrorOutput implements IGetMachineStatusMonitoringOutput {\n /** 施工機ステータスを取得または設定します。 */\n status?: MachineStatus | undefined;\n /** 施工機ステータス リストを取得または設定します。 */\n items?: MachineStatusMonitoringItem[] | undefined;\n /** 最終更新日時を取得または設定します。 */\n lastUpdatedAt?: string | undefined;\n /** タブレットIPアドレスを取得または設定します。 */\n ipAddress?: string | undefined;\n\n constructor(data?: IGetMachineStatusMonitoringOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.status = _data[\"status\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineStatusMonitoringItem.fromJS(item));\n }\n this.lastUpdatedAt = _data[\"lastUpdatedAt\"];\n this.ipAddress = _data[\"ipAddress\"];\n }\n }\n\n static fromJS(data: any): GetMachineStatusMonitoringOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineStatusMonitoringOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"status\"] = this.status;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n data[\"lastUpdatedAt\"] = this.lastUpdatedAt;\n data[\"ipAddress\"] = this.ipAddress;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMachineStatusMonitoringOutput {\n const json = this.toJSON();\n let result = new GetMachineStatusMonitoringOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機ステータスの取得に必要な入力情報を提供します。 */\nexport interface IGetMachineStatusMonitoringOutput extends IErrorOutput {\n /** 施工機ステータスを取得または設定します。 */\n status?: MachineStatus | undefined;\n /** 施工機ステータス リストを取得または設定します。 */\n items?: MachineStatusMonitoringItem[] | undefined;\n /** 最終更新日時を取得または設定します。 */\n lastUpdatedAt?: string | undefined;\n /** タブレットIPアドレスを取得または設定します。 */\n ipAddress?: string | undefined;\n}\n\nexport enum MachineStatus {\n Penetration = 1,\n Depth = 2,\n TipPullOut = 3,\n TipHitBack = 4,\n TipStir = 5,\n PullOut = 6,\n RePenePullOut = 7,\n RePeneHitBack = 8,\n Stop = 9,\n Other = 50,\n}\n\n/** 施工機モニター 1 項目分の情報を提供します。 */\nexport class MachineStatusMonitoringItem implements IMachineStatusMonitoringItem {\n /** データ種別を取得または設定します。 */\n type!: MachineDataType;\n /** 値を取得または設定します。 */\n value?: string | undefined;\n\n constructor(data?: IMachineStatusMonitoringItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.type = _data[\"type\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): MachineStatusMonitoringItem {\n data = typeof data === 'object' ? data : {};\n let result = new MachineStatusMonitoringItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"type\"] = this.type;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): MachineStatusMonitoringItem {\n const json = this.toJSON();\n let result = new MachineStatusMonitoringItem();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機モニター 1 項目分の情報を提供します。 */\nexport interface IMachineStatusMonitoringItem {\n /** データ種別を取得または設定します。 */\n type: MachineDataType;\n /** 値を取得または設定します。 */\n value?: string | undefined;\n}\n\nexport enum MachineDataType {\n AutoControlConnection = 1,\n CurrentDepth = 2,\n CurrentSpeed = 3,\n UpDownState = 4,\n UpDownPressure = 5,\n UpDownSpeedVolume = 6,\n LoadCell = 7,\n EmergencyStopState = 8,\n EngineRotateSpeed = 9,\n EcuError = 10,\n FrontRightJackPressure = 12,\n FrontLeftJackPressure = 13,\n RearRightJackPressure = 14,\n RearLeftJackPressure = 15,\n HookOverHoisting = 16,\n WorkingOilTemp = 17,\n PilotPressureWarning = 18,\n EngineCoolingWaterOverHeat = 19,\n FaultLamp = 20,\n BodyAngleX = 21,\n BodyAngleY = 22,\n LeaderAngleX = 23,\n LeaderAngleY = 24,\n LeftStayStrokeLength = 25,\n RightStayStrokeLength = 26,\n WorkingOilTempWarning = 27,\n FlowRate1 = 28,\n FlowRate2 = 29,\n Rotate1 = 30,\n Rotate2 = 31,\n Current1 = 32,\n Current2 = 33,\n Version = 34,\n BatteryVoltage = 35,\n TotalTime = 36,\n EngineTotalTime = 37,\n MainPumpTotalTime = 38,\n GearPumpTotalTime = 39,\n AugerTotalTime1 = 40,\n AugerTotalTime2 = 41,\n CraneTotalDistance = 44,\n EngineRotationTimeAvg = 45,\n BatteryVoltageAvg = 46,\n LiftingPressureMax = 47,\n OilTemperatureAvg = 48,\n WorkingOilTime = 49,\n EngineOilTime = 50,\n OilElementTime = 51,\n AirElementTime = 52,\n FuelElementTime = 53,\n WorkingOilElementTime = 54,\n BatteryTime = 55,\n CoolantTime = 56,\n FanBeltTime = 57,\n AlternatorTime = 58,\n StarterMotorTime = 59,\n OilPressurePumpCouplingTime = 60,\n OilPressurePumpDeceleratorOilTime = 61,\n WinchDeceleratorOilTime = 62,\n PrimaryHoistingWire = 63,\n SubHoistingWire = 64,\n UpsAndDownsWire = 65,\n PendantRope = 66,\n SelfInspection = 67,\n AlarmBatteryVoltage = 68,\n}\n\n/** 施工機ステータスの取得に必要な入力情報を提供します。 */\nexport class GetMachineStatusMonitoringInput implements IGetMachineStatusMonitoringInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n\n constructor(data?: IGetMachineStatusMonitoringInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n }\n }\n\n static fromJS(data: any): GetMachineStatusMonitoringInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMachineStatusMonitoringInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n return data; \n }\n\n clone(): GetMachineStatusMonitoringInput {\n const json = this.toJSON();\n let result = new GetMachineStatusMonitoringInput();\n result.init(json);\n return result;\n }\n}\n\n/** 施工機ステータスの取得に必要な入力情報を提供します。 */\nexport interface IGetMachineStatusMonitoringInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n}\n\n/** 制御要求の取得の結果情報を提供します。 */\nexport class GetClientRequestOutput extends ErrorOutput implements IGetClientRequestOutput {\n /** リセット要求リストを取得または設定します。 */\n resetItems?: ResetRequestItem[] | undefined;\n\n constructor(data?: IGetClientRequestOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"resetItems\"])) {\n this.resetItems = [] as any;\n for (let item of _data[\"resetItems\"])\n this.resetItems!.push(ResetRequestItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetClientRequestOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetClientRequestOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.resetItems)) {\n data[\"resetItems\"] = [];\n for (let item of this.resetItems)\n data[\"resetItems\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetClientRequestOutput {\n const json = this.toJSON();\n let result = new GetClientRequestOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 制御要求の取得の結果情報を提供します。 */\nexport interface IGetClientRequestOutput extends IErrorOutput {\n /** リセット要求リストを取得または設定します。 */\n resetItems?: ResetRequestItem[] | undefined;\n}\n\n/** リセット要求の情報を提供します。 */\nexport class ResetRequestItem implements IResetRequestItem {\n /** サブ種別を取得または設定します。 */\n type!: ResetSubRequestType;\n /** Hrメーター値を取得または設定します。 */\n hrMeter?: string | undefined;\n /** パラメーターを取得または設定します。 */\n parameter?: string | undefined;\n\n constructor(data?: IResetRequestItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.type = _data[\"type\"];\n this.hrMeter = _data[\"hrMeter\"];\n this.parameter = _data[\"parameter\"];\n }\n }\n\n static fromJS(data: any): ResetRequestItem {\n data = typeof data === 'object' ? data : {};\n let result = new ResetRequestItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"type\"] = this.type;\n data[\"hrMeter\"] = this.hrMeter;\n data[\"parameter\"] = this.parameter;\n return data; \n }\n\n clone(): ResetRequestItem {\n const json = this.toJSON();\n let result = new ResetRequestItem();\n result.init(json);\n return result;\n }\n}\n\n/** リセット要求の情報を提供します。 */\nexport interface IResetRequestItem {\n /** サブ種別を取得または設定します。 */\n type: ResetSubRequestType;\n /** Hrメーター値を取得または設定します。 */\n hrMeter?: string | undefined;\n /** パラメーターを取得または設定します。 */\n parameter?: string | undefined;\n}\n\nexport enum ResetSubRequestType {\n None = 0,\n EngineTotalTime = 1,\n CraneTotalDistance = 2,\n MainPumpTotalTime = 3,\n GearPumpTotalTime = 4,\n AugerTotalTime1 = 5,\n AugerTotalTime2 = 6,\n WorkingOilTime = 9,\n EngineOilTime = 10,\n OilElementTime = 11,\n AirElementTime = 12,\n FuelElementTime = 13,\n WorkingOilElementTime = 14,\n BatteryTime = 15,\n CoolantTime = 16,\n FanBeltTime = 17,\n AlternatorTime = 18,\n StarterMotorTime = 19,\n OilPressurePumpCouplingTime = 20,\n OilPressurePumpDeceleratorOilTime = 21,\n WinchDeceleratorOilTime = 22,\n PrimaryHoistingWire = 23,\n SubHoistingWire = 24,\n UpsAndDownsWire = 25,\n PendantRope = 26,\n SelfInspection = 27,\n TotalTime = 28,\n}\n\n/** 制御要求の取得の入力情報を提供します。 */\nexport class GetClientRequestInput implements IGetClientRequestInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n\n constructor(data?: IGetClientRequestInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n }\n }\n\n static fromJS(data: any): GetClientRequestInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetClientRequestInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n return data; \n }\n\n clone(): GetClientRequestInput {\n const json = this.toJSON();\n let result = new GetClientRequestInput();\n result.init(json);\n return result;\n }\n}\n\n/** 制御要求の取得の入力情報を提供します。 */\nexport interface IGetClientRequestInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n}\n\n/** 制御要求の追加・更新の結果情報を提供します。 */\nexport class AddOrUpdateClientRequestOutput extends ErrorOutput implements IAddOrUpdateClientRequestOutput {\n\n constructor(data?: IAddOrUpdateClientRequestOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): AddOrUpdateClientRequestOutput {\n data = typeof data === 'object' ? data : {};\n let result = new AddOrUpdateClientRequestOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): AddOrUpdateClientRequestOutput {\n const json = this.toJSON();\n let result = new AddOrUpdateClientRequestOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 制御要求の追加・更新の結果情報を提供します。 */\nexport interface IAddOrUpdateClientRequestOutput extends IErrorOutput {\n}\n\n/** 制御要求の追加・更新の入力情報を提供します。 */\nexport class AddOrUpdateClientRequestInput implements IAddOrUpdateClientRequestInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 制御要求種別を取得または設定します。 */\n type!: RequestType;\n /** リセット要求の情報を取得または設定します。 */\n reset?: ResetRequestItem | undefined;\n\n constructor(data?: IAddOrUpdateClientRequestInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.type = _data[\"type\"];\n this.reset = _data[\"reset\"] ? ResetRequestItem.fromJS(_data[\"reset\"]) : undefined;\n }\n }\n\n static fromJS(data: any): AddOrUpdateClientRequestInput {\n data = typeof data === 'object' ? data : {};\n let result = new AddOrUpdateClientRequestInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"type\"] = this.type;\n data[\"reset\"] = this.reset ? this.reset.toJSON() : undefined;\n return data; \n }\n\n clone(): AddOrUpdateClientRequestInput {\n const json = this.toJSON();\n let result = new AddOrUpdateClientRequestInput();\n result.init(json);\n return result;\n }\n}\n\n/** 制御要求の追加・更新の入力情報を提供します。 */\nexport interface IAddOrUpdateClientRequestInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 制御要求種別を取得または設定します。 */\n type: RequestType;\n /** リセット要求の情報を取得または設定します。 */\n reset?: ResetRequestItem | undefined;\n}\n\nexport enum RequestType {\n Reset = 1,\n}\n\n/** 制御要求の取得の結果情報を提供します。 */\nexport class GetResetHistoryOutput extends ErrorOutput implements IGetResetHistoryOutput {\n /** リセット要求リストを取得または設定します。 */\n items?: ResetHistoryItem[] | undefined;\n\n constructor(data?: IGetResetHistoryOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(ResetHistoryItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetResetHistoryOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetResetHistoryOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetResetHistoryOutput {\n const json = this.toJSON();\n let result = new GetResetHistoryOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 制御要求の取得の結果情報を提供します。 */\nexport interface IGetResetHistoryOutput extends IErrorOutput {\n /** リセット要求リストを取得または設定します。 */\n items?: ResetHistoryItem[] | undefined;\n}\n\n/** リセット要求の情報を提供します。 */\nexport class ResetHistoryItem implements IResetHistoryItem {\n /** サブ種別を取得または設定します。 */\n type!: ResetSubRequestType;\n /** パラメーターを取得または設定します。 */\n resetHistories?: KeyValueItemOfDateTimeAndString[] | undefined;\n\n constructor(data?: IResetHistoryItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.type = _data[\"type\"];\n if (Array.isArray(_data[\"resetHistories\"])) {\n this.resetHistories = [] as any;\n for (let item of _data[\"resetHistories\"])\n this.resetHistories!.push(KeyValueItemOfDateTimeAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): ResetHistoryItem {\n data = typeof data === 'object' ? data : {};\n let result = new ResetHistoryItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"type\"] = this.type;\n if (Array.isArray(this.resetHistories)) {\n data[\"resetHistories\"] = [];\n for (let item of this.resetHistories)\n data[\"resetHistories\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): ResetHistoryItem {\n const json = this.toJSON();\n let result = new ResetHistoryItem();\n result.init(json);\n return result;\n }\n}\n\n/** リセット要求の情報を提供します。 */\nexport interface IResetHistoryItem {\n /** サブ種別を取得または設定します。 */\n type: ResetSubRequestType;\n /** パラメーターを取得または設定します。 */\n resetHistories?: KeyValueItemOfDateTimeAndString[] | undefined;\n}\n\nexport class KeyValueItemOfDateTimeAndString implements IKeyValueItemOfDateTimeAndString {\n key!: string;\n value?: string | undefined;\n\n constructor(data?: IKeyValueItemOfDateTimeAndString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValueItemOfDateTimeAndString {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfDateTimeAndString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValueItemOfDateTimeAndString {\n const json = this.toJSON();\n let result = new KeyValueItemOfDateTimeAndString();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfDateTimeAndString {\n key: string;\n value?: string | undefined;\n}\n\n/** 制御要求の取得の入力情報を提供します。 */\nexport class GetResetHistroyInput implements IGetResetHistroyInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** */\n subRequestId?: number | undefined;\n\n constructor(data?: IGetResetHistroyInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.subRequestId = _data[\"subRequestId\"];\n }\n }\n\n static fromJS(data: any): GetResetHistroyInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetResetHistroyInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"subRequestId\"] = this.subRequestId;\n return data; \n }\n\n clone(): GetResetHistroyInput {\n const json = this.toJSON();\n let result = new GetResetHistroyInput();\n result.init(json);\n return result;\n }\n}\n\n/** 制御要求の取得の入力情報を提供します。 */\nexport interface IGetResetHistroyInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** */\n subRequestId?: number | undefined;\n}\n\n/** 整備記録の出力情報を提供します。 */\nexport class GetMaintenanceRecordOutput extends ErrorOutput implements IGetMaintenanceRecordOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: MaintenanceRecordItem[] | undefined;\n\n constructor(data?: IGetMaintenanceRecordOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MaintenanceRecordItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMaintenanceRecordOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceRecordOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenanceRecordOutput {\n const json = this.toJSON();\n let result = new GetMaintenanceRecordOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備記録の出力情報を提供します。 */\nexport interface IGetMaintenanceRecordOutput extends IErrorOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: MaintenanceRecordItem[] | undefined;\n}\n\n/** 整備記録の 1 項目分の情報を提供します。 */\nexport class MaintenanceRecordItem implements IMaintenanceRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 整備日を取得または設定します。 */\n maintenanceAt!: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId!: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected!: boolean;\n\n constructor(data?: IMaintenanceRecordItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.maintenanceAt = _data[\"maintenanceAt\"];\n this.method = _data[\"method\"];\n this.areaId = _data[\"areaId\"];\n this.site = _data[\"site\"];\n this.worker = _data[\"worker\"];\n this.report = _data[\"report\"];\n this.isInspected = _data[\"isInspected\"];\n }\n }\n\n static fromJS(data: any): MaintenanceRecordItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceRecordItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"maintenanceAt\"] = this.maintenanceAt;\n data[\"method\"] = this.method;\n data[\"areaId\"] = this.areaId;\n data[\"site\"] = this.site;\n data[\"worker\"] = this.worker;\n data[\"report\"] = this.report;\n data[\"isInspected\"] = this.isInspected;\n return data; \n }\n\n clone(): MaintenanceRecordItem {\n const json = this.toJSON();\n let result = new MaintenanceRecordItem();\n result.init(json);\n return result;\n }\n}\n\n/** 整備記録の 1 項目分の情報を提供します。 */\nexport interface IMaintenanceRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 整備日を取得または設定します。 */\n maintenanceAt: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected: boolean;\n}\n\n/** 整備記録の取得に必要な入力情報を提供します。 */\nexport class GetMaintenanceRecordInput implements IGetMaintenanceRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType!: MaintenanceRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n\n constructor(data?: IGetMaintenanceRecordInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n this.searchType = _data[\"searchType\"];\n this.searchWord = _data[\"searchWord\"];\n this.isInspected = _data[\"isInspected\"];\n this.searchBeginAt = _data[\"searchBeginAt\"];\n this.searchEndAt = _data[\"searchEndAt\"];\n }\n }\n\n static fromJS(data: any): GetMaintenanceRecordInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceRecordInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n data[\"searchType\"] = this.searchType;\n data[\"searchWord\"] = this.searchWord;\n data[\"isInspected\"] = this.isInspected;\n data[\"searchBeginAt\"] = this.searchBeginAt;\n data[\"searchEndAt\"] = this.searchEndAt;\n return data; \n }\n\n clone(): GetMaintenanceRecordInput {\n const json = this.toJSON();\n let result = new GetMaintenanceRecordInput();\n result.init(json);\n return result;\n }\n}\n\n/** 整備記録の取得に必要な入力情報を提供します。 */\nexport interface IGetMaintenanceRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType: MaintenanceRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n}\n\n/** 整備記録の検索種別を表す列挙値を提供します。 */\nexport enum MaintenanceRecordSearchType {\n None = 0,\n Site = 1,\n Worker = 2,\n Report = 3,\n}\n\n/** 週間月例点検記録の出力情報を提供します。 */\nexport class GetWeeklyInspectionRecordOutput extends ErrorOutput implements IGetWeeklyInspectionRecordOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: WeeklyInspectionRecordItem[] | undefined;\n\n constructor(data?: IGetWeeklyInspectionRecordOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(WeeklyInspectionRecordItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetWeeklyInspectionRecordOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetWeeklyInspectionRecordOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetWeeklyInspectionRecordOutput {\n const json = this.toJSON();\n let result = new GetWeeklyInspectionRecordOutput();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検記録の出力情報を提供します。 */\nexport interface IGetWeeklyInspectionRecordOutput extends IErrorOutput {\n /** 整備記録リストを取得または設定します。 */\n items?: WeeklyInspectionRecordItem[] | undefined;\n}\n\n/** 週間月例点検記録の 1 項目分の情報を提供します。 */\nexport class WeeklyInspectionRecordItem implements IWeeklyInspectionRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 点検日を取得または設定します。 */\n inspectionAt!: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId!: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected!: boolean;\n\n constructor(data?: IWeeklyInspectionRecordItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.inspectionAt = _data[\"inspectionAt\"];\n this.method = _data[\"method\"];\n this.areaId = _data[\"areaId\"];\n this.site = _data[\"site\"];\n this.worker = _data[\"worker\"];\n this.report = _data[\"report\"];\n this.isInspected = _data[\"isInspected\"];\n }\n }\n\n static fromJS(data: any): WeeklyInspectionRecordItem {\n data = typeof data === 'object' ? data : {};\n let result = new WeeklyInspectionRecordItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"inspectionAt\"] = this.inspectionAt;\n data[\"method\"] = this.method;\n data[\"areaId\"] = this.areaId;\n data[\"site\"] = this.site;\n data[\"worker\"] = this.worker;\n data[\"report\"] = this.report;\n data[\"isInspected\"] = this.isInspected;\n return data; \n }\n\n clone(): WeeklyInspectionRecordItem {\n const json = this.toJSON();\n let result = new WeeklyInspectionRecordItem();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検記録の 1 項目分の情報を提供します。 */\nexport interface IWeeklyInspectionRecordItem {\n /** 整備検査表 No を取得または設定します。 */\n reportNo?: string | undefined;\n /** 点検日を取得または設定します。 */\n inspectionAt: string;\n /** 工法を取得または設定します。 */\n method?: string | undefined;\n /** エリア ID を取得または設定します。 */\n areaId: number;\n /** 作業場所を取得または設定します。 */\n site?: string | undefined;\n /** 作業者を取得または設定します。 */\n worker?: string | undefined;\n /** 報告事項を取得または設定します。 */\n report?: string | undefined;\n /** 検印済かどうかを表す値を取得または設定します。 */\n isInspected: boolean;\n}\n\n/** 週間月例点検記録の取得に必要な入力情報を提供します。 */\nexport class GetWeeklyInspectionRecordInput implements IGetWeeklyInspectionRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType!: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType!: WeeklyInspectionRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n\n constructor(data?: IGetWeeklyInspectionRecordInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n this.searchType = _data[\"searchType\"];\n this.searchWord = _data[\"searchWord\"];\n this.isInspected = _data[\"isInspected\"];\n this.searchBeginAt = _data[\"searchBeginAt\"];\n this.searchEndAt = _data[\"searchEndAt\"];\n }\n }\n\n static fromJS(data: any): GetWeeklyInspectionRecordInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetWeeklyInspectionRecordInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n data[\"searchType\"] = this.searchType;\n data[\"searchWord\"] = this.searchWord;\n data[\"isInspected\"] = this.isInspected;\n data[\"searchBeginAt\"] = this.searchBeginAt;\n data[\"searchEndAt\"] = this.searchEndAt;\n return data; \n }\n\n clone(): GetWeeklyInspectionRecordInput {\n const json = this.toJSON();\n let result = new GetWeeklyInspectionRecordInput();\n result.init(json);\n return result;\n }\n}\n\n/** 週間月例点検記録の取得に必要な入力情報を提供します。 */\nexport interface IGetWeeklyInspectionRecordInput {\n /** 施工機管理番号を取得または設定します。 */\n machineId?: string | undefined;\n /** 施工機種別を取得または設定します。 */\n machineType: MachineType;\n /** 検索種別を取得または設定します。 */\n searchType: WeeklyInspectionRecordSearchType;\n /** 検索ワードを取得または設定します。 */\n searchWord?: string | undefined;\n /** 検印検索条件を取得または設定します。\nture で検印済を、 false で未検印を、 null で条件無しとなります。 */\n isInspected?: boolean | undefined;\n /** 検索開始日を取得または設定します。 */\n searchBeginAt?: string | undefined;\n /** 検索終了日を取得または設定します。 */\n searchEndAt?: string | undefined;\n}\n\n/** 週間月例点検記録の検索種別を表す列挙値を提供します。 */\nexport enum WeeklyInspectionRecordSearchType {\n None = 0,\n Site = 1,\n Worker = 2,\n Report = 3,\n}\n\n/** サインインの出力情報を提供します。 */\nexport class SignInOutput implements ISignInOutput {\n /** エラー メッセージを取得または設定します。 */\n errorMessage?: string | undefined;\n /** サインインが正常に終了した後に遷移する `URL` を取得または設定します。 */\n returnUrl?: string | undefined;\n\n constructor(data?: ISignInOutput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.errorMessage = _data[\"errorMessage\"];\n this.returnUrl = _data[\"returnUrl\"];\n }\n }\n\n static fromJS(data: any): SignInOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SignInOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"errorMessage\"] = this.errorMessage;\n data[\"returnUrl\"] = this.returnUrl;\n return data; \n }\n\n clone(): SignInOutput {\n const json = this.toJSON();\n let result = new SignInOutput();\n result.init(json);\n return result;\n }\n}\n\n/** サインインの出力情報を提供します。 */\nexport interface ISignInOutput {\n /** エラー メッセージを取得または設定します。 */\n errorMessage?: string | undefined;\n /** サインインが正常に終了した後に遷移する `URL` を取得または設定します。 */\n returnUrl?: string | undefined;\n}\n\n/** サインインの入力情報を提供します。 */\nexport class SignInInput implements ISignInInput {\n /** ユーザー ID を取得します。 */\n userId?: string | undefined;\n /** パスワードを取得または設定します。 */\n password?: string | undefined;\n\n constructor(data?: ISignInInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.userId = _data[\"userId\"];\n this.password = _data[\"password\"];\n }\n }\n\n static fromJS(data: any): SignInInput {\n data = typeof data === 'object' ? data : {};\n let result = new SignInInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"userId\"] = this.userId;\n data[\"password\"] = this.password;\n return data; \n }\n\n clone(): SignInInput {\n const json = this.toJSON();\n let result = new SignInInput();\n result.init(json);\n return result;\n }\n}\n\n/** サインインの入力情報を提供します。 */\nexport interface ISignInInput {\n /** ユーザー ID を取得します。 */\n userId?: string | undefined;\n /** パスワードを取得または設定します。 */\n password?: string | undefined;\n}\n\n/** トークン情報要求の出力情報を提供します。 */\nexport class GetTokenOutput extends ErrorOutput implements IGetTokenOutput {\n /** 認証トークンを取得または設定します。 */\n token?: string | undefined;\n\n constructor(data?: IGetTokenOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.token = _data[\"token\"];\n }\n }\n\n static fromJS(data: any): GetTokenOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetTokenOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"token\"] = this.token;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetTokenOutput {\n const json = this.toJSON();\n let result = new GetTokenOutput();\n result.init(json);\n return result;\n }\n}\n\n/** トークン情報要求の出力情報を提供します。 */\nexport interface IGetTokenOutput extends IErrorOutput {\n /** 認証トークンを取得または設定します。 */\n token?: string | undefined;\n}\n\nexport abstract class OutputBase2 implements IOutputBase2 {\n\n constructor(data?: IOutputBase2) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n }\n\n static fromJS(data: any): OutputBase2 {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'OutputBase2' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n return data; \n }\n\n clone(): OutputBase2 {\n throw new Error(\"The abstract class 'OutputBase2' cannot be instantiated.\");\n }\n}\n\nexport interface IOutputBase2 {\n}\n\nexport class ErrorOutput2 extends OutputBase2 implements IErrorOutput2 {\n isError!: boolean;\n errorMessage?: string | undefined;\n\n constructor(data?: IErrorOutput2) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.isError = _data[\"isError\"];\n this.errorMessage = _data[\"errorMessage\"];\n }\n }\n\n static fromJS(data: any): ErrorOutput2 {\n data = typeof data === 'object' ? data : {};\n let result = new ErrorOutput2();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"isError\"] = this.isError;\n data[\"errorMessage\"] = this.errorMessage;\n super.toJSON(data);\n return data; \n }\n\n clone(): ErrorOutput2 {\n const json = this.toJSON();\n let result = new ErrorOutput2();\n result.init(json);\n return result;\n }\n}\n\nexport interface IErrorOutput2 extends IOutputBase2 {\n isError: boolean;\n errorMessage?: string | undefined;\n}\n\nexport class GetVersionOutput extends ErrorOutput2 implements IGetVersionOutput {\n versions?: KeyValueItemOfIntegerAndVersionItem[] | undefined;\n\n constructor(data?: IGetVersionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"versions\"])) {\n this.versions = [] as any;\n for (let item of _data[\"versions\"])\n this.versions!.push(KeyValueItemOfIntegerAndVersionItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetVersionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetVersionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.versions)) {\n data[\"versions\"] = [];\n for (let item of this.versions)\n data[\"versions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetVersionOutput {\n const json = this.toJSON();\n let result = new GetVersionOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetVersionOutput extends IErrorOutput2 {\n versions?: KeyValueItemOfIntegerAndVersionItem[] | undefined;\n}\n\nexport class KeyValueItemOfIntegerAndVersionItem implements IKeyValueItemOfIntegerAndVersionItem {\n key!: number;\n value?: VersionItem | undefined;\n\n constructor(data?: IKeyValueItemOfIntegerAndVersionItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? VersionItem.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfIntegerAndVersionItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfIntegerAndVersionItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfIntegerAndVersionItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfIntegerAndVersionItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfIntegerAndVersionItem {\n key: number;\n value?: VersionItem | undefined;\n}\n\nexport class VersionItem implements IVersionItem {\n version?: string | undefined;\n versionDate!: string;\n\n constructor(data?: IVersionItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.version = _data[\"version\"];\n this.versionDate = _data[\"versionDate\"];\n }\n }\n\n static fromJS(data: any): VersionItem {\n data = typeof data === 'object' ? data : {};\n let result = new VersionItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"version\"] = this.version;\n data[\"versionDate\"] = this.versionDate;\n return data; \n }\n\n clone(): VersionItem {\n const json = this.toJSON();\n let result = new VersionItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IVersionItem {\n version?: string | undefined;\n versionDate: string;\n}\n\nexport abstract class InputBase implements IInputBase {\n\n constructor(data?: IInputBase) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n }\n\n static fromJS(data: any): InputBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'InputBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n return data; \n }\n\n clone(): InputBase {\n throw new Error(\"The abstract class 'InputBase' cannot be instantiated.\");\n }\n}\n\nexport interface IInputBase {\n}\n\nexport class GetVersionInput extends InputBase implements IGetVersionInput {\n\n constructor(data?: IGetVersionInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): GetVersionInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetVersionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): GetVersionInput {\n const json = this.toJSON();\n let result = new GetVersionInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetVersionInput extends IInputBase {\n}\n\nexport class UpdateVersionOutput extends ErrorOutput2 implements IUpdateVersionOutput {\n versions?: KeyValueItemOfIntegerAndVersionItem[] | undefined;\n masterInfo?: MasterInfo | undefined;\n mainteInfos?: KeyValueItemOfIntegerAndMaintenanceInfo[] | undefined;\n inspInfos?: KeyValueItemOfIntegerAndInspectionInfo[] | undefined;\n\n constructor(data?: IUpdateVersionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"versions\"])) {\n this.versions = [] as any;\n for (let item of _data[\"versions\"])\n this.versions!.push(KeyValueItemOfIntegerAndVersionItem.fromJS(item));\n }\n this.masterInfo = _data[\"masterInfo\"] ? MasterInfo.fromJS(_data[\"masterInfo\"]) : undefined;\n if (Array.isArray(_data[\"mainteInfos\"])) {\n this.mainteInfos = [] as any;\n for (let item of _data[\"mainteInfos\"])\n this.mainteInfos!.push(KeyValueItemOfIntegerAndMaintenanceInfo.fromJS(item));\n }\n if (Array.isArray(_data[\"inspInfos\"])) {\n this.inspInfos = [] as any;\n for (let item of _data[\"inspInfos\"])\n this.inspInfos!.push(KeyValueItemOfIntegerAndInspectionInfo.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): UpdateVersionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateVersionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.versions)) {\n data[\"versions\"] = [];\n for (let item of this.versions)\n data[\"versions\"].push(item.toJSON());\n }\n data[\"masterInfo\"] = this.masterInfo ? this.masterInfo.toJSON() : undefined;\n if (Array.isArray(this.mainteInfos)) {\n data[\"mainteInfos\"] = [];\n for (let item of this.mainteInfos)\n data[\"mainteInfos\"].push(item.toJSON());\n }\n if (Array.isArray(this.inspInfos)) {\n data[\"inspInfos\"] = [];\n for (let item of this.inspInfos)\n data[\"inspInfos\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateVersionOutput {\n const json = this.toJSON();\n let result = new UpdateVersionOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IUpdateVersionOutput extends IErrorOutput2 {\n versions?: KeyValueItemOfIntegerAndVersionItem[] | undefined;\n masterInfo?: MasterInfo | undefined;\n mainteInfos?: KeyValueItemOfIntegerAndMaintenanceInfo[] | undefined;\n inspInfos?: KeyValueItemOfIntegerAndInspectionInfo[] | undefined;\n}\n\nexport class MasterInfo implements IMasterInfo {\n modelItems?: KeyValueItemOfIntegerAndString[] | undefined;\n manufacturerItems?: KeyValueItemOfIntegerAndString[] | undefined;\n methodItems?: KeyValueItemOfIntegerAndString[] | undefined;\n machines?: KeyValueItemOfIntegerAndListOfMachineItem[] | undefined;\n\n constructor(data?: IMasterInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"modelItems\"])) {\n this.modelItems = [] as any;\n for (let item of _data[\"modelItems\"])\n this.modelItems!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n if (Array.isArray(_data[\"manufacturerItems\"])) {\n this.manufacturerItems = [] as any;\n for (let item of _data[\"manufacturerItems\"])\n this.manufacturerItems!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n if (Array.isArray(_data[\"methodItems\"])) {\n this.methodItems = [] as any;\n for (let item of _data[\"methodItems\"])\n this.methodItems!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n if (Array.isArray(_data[\"machines\"])) {\n this.machines = [] as any;\n for (let item of _data[\"machines\"])\n this.machines!.push(KeyValueItemOfIntegerAndListOfMachineItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MasterInfo {\n data = typeof data === 'object' ? data : {};\n let result = new MasterInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.modelItems)) {\n data[\"modelItems\"] = [];\n for (let item of this.modelItems)\n data[\"modelItems\"].push(item.toJSON());\n }\n if (Array.isArray(this.manufacturerItems)) {\n data[\"manufacturerItems\"] = [];\n for (let item of this.manufacturerItems)\n data[\"manufacturerItems\"].push(item.toJSON());\n }\n if (Array.isArray(this.methodItems)) {\n data[\"methodItems\"] = [];\n for (let item of this.methodItems)\n data[\"methodItems\"].push(item.toJSON());\n }\n if (Array.isArray(this.machines)) {\n data[\"machines\"] = [];\n for (let item of this.machines)\n data[\"machines\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): MasterInfo {\n const json = this.toJSON();\n let result = new MasterInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMasterInfo {\n modelItems?: KeyValueItemOfIntegerAndString[] | undefined;\n manufacturerItems?: KeyValueItemOfIntegerAndString[] | undefined;\n methodItems?: KeyValueItemOfIntegerAndString[] | undefined;\n machines?: KeyValueItemOfIntegerAndListOfMachineItem[] | undefined;\n}\n\nexport class KeyValueItemOfIntegerAndString implements IKeyValueItemOfIntegerAndString {\n key!: number;\n value?: string | undefined;\n\n constructor(data?: IKeyValueItemOfIntegerAndString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValueItemOfIntegerAndString {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfIntegerAndString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValueItemOfIntegerAndString {\n const json = this.toJSON();\n let result = new KeyValueItemOfIntegerAndString();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfIntegerAndString {\n key: number;\n value?: string | undefined;\n}\n\nexport class KeyValueItemOfIntegerAndListOfMachineItem implements IKeyValueItemOfIntegerAndListOfMachineItem {\n key!: number;\n value?: MachineItem3[] | undefined;\n\n constructor(data?: IKeyValueItemOfIntegerAndListOfMachineItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n if (Array.isArray(_data[\"value\"])) {\n this.value = [] as any;\n for (let item of _data[\"value\"])\n this.value!.push(MachineItem3.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): KeyValueItemOfIntegerAndListOfMachineItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfIntegerAndListOfMachineItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n if (Array.isArray(this.value)) {\n data[\"value\"] = [];\n for (let item of this.value)\n data[\"value\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): KeyValueItemOfIntegerAndListOfMachineItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfIntegerAndListOfMachineItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfIntegerAndListOfMachineItem {\n key: number;\n value?: MachineItem3[] | undefined;\n}\n\nexport class MachineItem3 implements IMachineItem3 {\n id?: string | undefined;\n modelId!: number;\n manufacturerId!: number;\n ctuId?: string | undefined;\n accessPoints?: string[] | undefined;\n maintenanceCtuId?: string | undefined;\n maintenanceAccessPoints?: string[] | undefined;\n\n constructor(data?: IMachineItem3) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.modelId = _data[\"modelId\"];\n this.manufacturerId = _data[\"manufacturerId\"];\n this.ctuId = _data[\"ctuId\"];\n if (Array.isArray(_data[\"accessPoints\"])) {\n this.accessPoints = [] as any;\n for (let item of _data[\"accessPoints\"])\n this.accessPoints!.push(item);\n }\n this.maintenanceCtuId = _data[\"maintenanceCtuId\"];\n if (Array.isArray(_data[\"maintenanceAccessPoints\"])) {\n this.maintenanceAccessPoints = [] as any;\n for (let item of _data[\"maintenanceAccessPoints\"])\n this.maintenanceAccessPoints!.push(item);\n }\n }\n }\n\n static fromJS(data: any): MachineItem3 {\n data = typeof data === 'object' ? data : {};\n let result = new MachineItem3();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"modelId\"] = this.modelId;\n data[\"manufacturerId\"] = this.manufacturerId;\n data[\"ctuId\"] = this.ctuId;\n if (Array.isArray(this.accessPoints)) {\n data[\"accessPoints\"] = [];\n for (let item of this.accessPoints)\n data[\"accessPoints\"].push(item);\n }\n data[\"maintenanceCtuId\"] = this.maintenanceCtuId;\n if (Array.isArray(this.maintenanceAccessPoints)) {\n data[\"maintenanceAccessPoints\"] = [];\n for (let item of this.maintenanceAccessPoints)\n data[\"maintenanceAccessPoints\"].push(item);\n }\n return data; \n }\n\n clone(): MachineItem3 {\n const json = this.toJSON();\n let result = new MachineItem3();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMachineItem3 {\n id?: string | undefined;\n modelId: number;\n manufacturerId: number;\n ctuId?: string | undefined;\n accessPoints?: string[] | undefined;\n maintenanceCtuId?: string | undefined;\n maintenanceAccessPoints?: string[] | undefined;\n}\n\nexport class KeyValueItemOfIntegerAndMaintenanceInfo implements IKeyValueItemOfIntegerAndMaintenanceInfo {\n key!: number;\n value?: MaintenanceInfo | undefined;\n\n constructor(data?: IKeyValueItemOfIntegerAndMaintenanceInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? MaintenanceInfo.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfIntegerAndMaintenanceInfo {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfIntegerAndMaintenanceInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfIntegerAndMaintenanceInfo {\n const json = this.toJSON();\n let result = new KeyValueItemOfIntegerAndMaintenanceInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfIntegerAndMaintenanceInfo {\n key: number;\n value?: MaintenanceInfo | undefined;\n}\n\nexport class MaintenanceInfo implements IMaintenanceInfo {\n divisions?: MaintenanceDivision[] | undefined;\n\n constructor(data?: IMaintenanceInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(MaintenanceDivision.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceInfo {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): MaintenanceInfo {\n const json = this.toJSON();\n let result = new MaintenanceInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceInfo {\n divisions?: MaintenanceDivision[] | undefined;\n}\n\nexport class MaintenanceDivision implements IMaintenanceDivision {\n id!: number;\n name?: string | undefined;\n items?: MaintenanceItem[] | undefined;\n\n constructor(data?: IMaintenanceDivision) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MaintenanceItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceDivision {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceDivision();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): MaintenanceDivision {\n const json = this.toJSON();\n let result = new MaintenanceDivision();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceDivision {\n id: number;\n name?: string | undefined;\n items?: MaintenanceItem[] | undefined;\n}\n\nexport class MaintenanceItem implements IMaintenanceItem {\n id!: number;\n name?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n\n constructor(data?: IMaintenanceItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.unit = _data[\"unit\"];\n this.inputThresh = _data[\"inputThresh\"] ? Threshold.fromJS(_data[\"inputThresh\"]) : undefined;\n this.lightAlarmThresh = _data[\"lightAlarmThresh\"] ? Threshold.fromJS(_data[\"lightAlarmThresh\"]) : undefined;\n this.heavyAlarmThresh = _data[\"heavyAlarmThresh\"] ? Threshold.fromJS(_data[\"heavyAlarmThresh\"]) : undefined;\n this.remarks = _data[\"remarks\"];\n }\n }\n\n static fromJS(data: any): MaintenanceItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"unit\"] = this.unit;\n data[\"inputThresh\"] = this.inputThresh ? this.inputThresh.toJSON() : undefined;\n data[\"lightAlarmThresh\"] = this.lightAlarmThresh ? this.lightAlarmThresh.toJSON() : undefined;\n data[\"heavyAlarmThresh\"] = this.heavyAlarmThresh ? this.heavyAlarmThresh.toJSON() : undefined;\n data[\"remarks\"] = this.remarks;\n return data; \n }\n\n clone(): MaintenanceItem {\n const json = this.toJSON();\n let result = new MaintenanceItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceItem {\n id: number;\n name?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n}\n\nexport class Threshold implements IThreshold {\n lowerLimit?: string | undefined;\n higherLimit?: string | undefined;\n\n constructor(data?: IThreshold) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.lowerLimit = _data[\"lowerLimit\"];\n this.higherLimit = _data[\"higherLimit\"];\n }\n }\n\n static fromJS(data: any): Threshold {\n data = typeof data === 'object' ? data : {};\n let result = new Threshold();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"lowerLimit\"] = this.lowerLimit;\n data[\"higherLimit\"] = this.higherLimit;\n return data; \n }\n\n clone(): Threshold {\n const json = this.toJSON();\n let result = new Threshold();\n result.init(json);\n return result;\n }\n}\n\nexport interface IThreshold {\n lowerLimit?: string | undefined;\n higherLimit?: string | undefined;\n}\n\nexport class KeyValueItemOfIntegerAndInspectionInfo implements IKeyValueItemOfIntegerAndInspectionInfo {\n key!: number;\n value?: InspectionInfo | undefined;\n\n constructor(data?: IKeyValueItemOfIntegerAndInspectionInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? InspectionInfo.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfIntegerAndInspectionInfo {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfIntegerAndInspectionInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfIntegerAndInspectionInfo {\n const json = this.toJSON();\n let result = new KeyValueItemOfIntegerAndInspectionInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfIntegerAndInspectionInfo {\n key: number;\n value?: InspectionInfo | undefined;\n}\n\nexport class InspectionInfo implements IInspectionInfo {\n divisions?: InspectionDivision[] | undefined;\n\n constructor(data?: IInspectionInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(InspectionDivision.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): InspectionInfo {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): InspectionInfo {\n const json = this.toJSON();\n let result = new InspectionInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IInspectionInfo {\n divisions?: InspectionDivision[] | undefined;\n}\n\nexport class InspectionDivision implements IInspectionDivision {\n id!: number;\n name?: string | undefined;\n items?: InspectionItem[] | undefined;\n\n constructor(data?: IInspectionDivision) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(InspectionItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): InspectionDivision {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionDivision();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): InspectionDivision {\n const json = this.toJSON();\n let result = new InspectionDivision();\n result.init(json);\n return result;\n }\n}\n\nexport interface IInspectionDivision {\n id: number;\n name?: string | undefined;\n items?: InspectionItem[] | undefined;\n}\n\nexport class InspectionItem implements IInspectionItem {\n id!: number;\n name?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n\n constructor(data?: IInspectionItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.unit = _data[\"unit\"];\n this.inputThresh = _data[\"inputThresh\"] ? Threshold.fromJS(_data[\"inputThresh\"]) : undefined;\n this.lightAlarmThresh = _data[\"lightAlarmThresh\"] ? Threshold.fromJS(_data[\"lightAlarmThresh\"]) : undefined;\n this.heavyAlarmThresh = _data[\"heavyAlarmThresh\"] ? Threshold.fromJS(_data[\"heavyAlarmThresh\"]) : undefined;\n this.remarks = _data[\"remarks\"];\n }\n }\n\n static fromJS(data: any): InspectionItem {\n data = typeof data === 'object' ? data : {};\n let result = new InspectionItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"unit\"] = this.unit;\n data[\"inputThresh\"] = this.inputThresh ? this.inputThresh.toJSON() : undefined;\n data[\"lightAlarmThresh\"] = this.lightAlarmThresh ? this.lightAlarmThresh.toJSON() : undefined;\n data[\"heavyAlarmThresh\"] = this.heavyAlarmThresh ? this.heavyAlarmThresh.toJSON() : undefined;\n data[\"remarks\"] = this.remarks;\n return data; \n }\n\n clone(): InspectionItem {\n const json = this.toJSON();\n let result = new InspectionItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IInspectionItem {\n id: number;\n name?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n}\n\nexport class UpdateVersionInput extends InputBase implements IUpdateVersionInput {\n versions?: KeyValueItemOfIntegerAndString[] | undefined;\n\n constructor(data?: IUpdateVersionInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"versions\"])) {\n this.versions = [] as any;\n for (let item of _data[\"versions\"])\n this.versions!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): UpdateVersionInput {\n data = typeof data === 'object' ? data : {};\n let result = new UpdateVersionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.versions)) {\n data[\"versions\"] = [];\n for (let item of this.versions)\n data[\"versions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): UpdateVersionInput {\n const json = this.toJSON();\n let result = new UpdateVersionInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IUpdateVersionInput extends IInputBase {\n versions?: KeyValueItemOfIntegerAndString[] | undefined;\n}\n\nexport class SaveApplicationDataOutput extends ErrorOutput2 implements ISaveApplicationDataOutput {\n\n constructor(data?: ISaveApplicationDataOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): SaveApplicationDataOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveApplicationDataOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveApplicationDataOutput {\n const json = this.toJSON();\n let result = new SaveApplicationDataOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveApplicationDataOutput extends IErrorOutput2 {\n}\n\nexport class SaveApplicationDataInput extends InputBase implements ISaveApplicationDataInput {\n lockId?: string | undefined;\n machineIds?: KeyValueItemOfIntegerAndString[] | undefined;\n areaId!: AreaType;\n siteName?: string | undefined;\n savedAt?: string | undefined;\n items?: CtuMaintenanceItem[] | undefined;\n isCamouflage!: boolean;\n\n constructor(data?: ISaveApplicationDataInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.lockId = _data[\"lockId\"];\n if (Array.isArray(_data[\"machineIds\"])) {\n this.machineIds = [] as any;\n for (let item of _data[\"machineIds\"])\n this.machineIds!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n this.areaId = _data[\"areaId\"];\n this.siteName = _data[\"siteName\"];\n this.savedAt = _data[\"savedAt\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(CtuMaintenanceItem.fromJS(item));\n }\n this.isCamouflage = _data[\"isCamouflage\"];\n }\n }\n\n static fromJS(data: any): SaveApplicationDataInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveApplicationDataInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"lockId\"] = this.lockId;\n if (Array.isArray(this.machineIds)) {\n data[\"machineIds\"] = [];\n for (let item of this.machineIds)\n data[\"machineIds\"].push(item.toJSON());\n }\n data[\"areaId\"] = this.areaId;\n data[\"siteName\"] = this.siteName;\n data[\"savedAt\"] = this.savedAt;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n data[\"isCamouflage\"] = this.isCamouflage;\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveApplicationDataInput {\n const json = this.toJSON();\n let result = new SaveApplicationDataInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveApplicationDataInput extends IInputBase {\n lockId?: string | undefined;\n machineIds?: KeyValueItemOfIntegerAndString[] | undefined;\n areaId: AreaType;\n siteName?: string | undefined;\n savedAt?: string | undefined;\n items?: CtuMaintenanceItem[] | undefined;\n isCamouflage: boolean;\n}\n\nexport class CtuMaintenanceItem implements ICtuMaintenanceItem {\n dataType!: MachineDataType;\n integratedValue?: string | undefined;\n referenceValue?: string | undefined;\n\n constructor(data?: ICtuMaintenanceItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.dataType = _data[\"dataType\"];\n this.integratedValue = _data[\"integratedValue\"];\n this.referenceValue = _data[\"referenceValue\"];\n }\n }\n\n static fromJS(data: any): CtuMaintenanceItem {\n data = typeof data === 'object' ? data : {};\n let result = new CtuMaintenanceItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"dataType\"] = this.dataType;\n data[\"integratedValue\"] = this.integratedValue;\n data[\"referenceValue\"] = this.referenceValue;\n return data; \n }\n\n clone(): CtuMaintenanceItem {\n const json = this.toJSON();\n let result = new CtuMaintenanceItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface ICtuMaintenanceItem {\n dataType: MachineDataType;\n integratedValue?: string | undefined;\n referenceValue?: string | undefined;\n}\n\nexport class SaveDailyInspectionOutput extends ErrorOutput2 implements ISaveDailyInspectionOutput {\n reportNo?: string | undefined;\n\n constructor(data?: ISaveDailyInspectionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): SaveDailyInspectionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveDailyInspectionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveDailyInspectionOutput {\n const json = this.toJSON();\n let result = new SaveDailyInspectionOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveDailyInspectionOutput extends IErrorOutput2 {\n reportNo?: string | undefined;\n}\n\nexport class SaveDailyInspectionInput extends InputBase implements ISaveDailyInspectionInput {\n baseInfo?: InspectedBaseInfo | undefined;\n headers?: InspectedHeaderItem[] | undefined;\n datas?: InspectedDataItem[] | undefined;\n\n constructor(data?: ISaveDailyInspectionInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseInfo = _data[\"baseInfo\"] ? InspectedBaseInfo.fromJS(_data[\"baseInfo\"]) : undefined;\n if (Array.isArray(_data[\"headers\"])) {\n this.headers = [] as any;\n for (let item of _data[\"headers\"])\n this.headers!.push(InspectedHeaderItem.fromJS(item));\n }\n if (Array.isArray(_data[\"datas\"])) {\n this.datas = [] as any;\n for (let item of _data[\"datas\"])\n this.datas!.push(InspectedDataItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveDailyInspectionInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveDailyInspectionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseInfo\"] = this.baseInfo ? this.baseInfo.toJSON() : undefined;\n if (Array.isArray(this.headers)) {\n data[\"headers\"] = [];\n for (let item of this.headers)\n data[\"headers\"].push(item.toJSON());\n }\n if (Array.isArray(this.datas)) {\n data[\"datas\"] = [];\n for (let item of this.datas)\n data[\"datas\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveDailyInspectionInput {\n const json = this.toJSON();\n let result = new SaveDailyInspectionInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveDailyInspectionInput extends IInputBase {\n baseInfo?: InspectedBaseInfo | undefined;\n headers?: InspectedHeaderItem[] | undefined;\n datas?: InspectedDataItem[] | undefined;\n}\n\nexport class InspectedBaseInfo implements IInspectedBaseInfo {\n machineIds?: KeyValueItemOfIntegerAndString[] | undefined;\n reportItem?: string | undefined;\n areaId!: number;\n version?: string | undefined;\n inspectionAt!: string;\n imageFileNames?: string[] | undefined;\n\n constructor(data?: IInspectedBaseInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"machineIds\"])) {\n this.machineIds = [] as any;\n for (let item of _data[\"machineIds\"])\n this.machineIds!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n this.reportItem = _data[\"reportItem\"];\n this.areaId = _data[\"areaId\"];\n this.version = _data[\"version\"];\n this.inspectionAt = _data[\"inspectionAt\"];\n if (Array.isArray(_data[\"imageFileNames\"])) {\n this.imageFileNames = [] as any;\n for (let item of _data[\"imageFileNames\"])\n this.imageFileNames!.push(item);\n }\n }\n }\n\n static fromJS(data: any): InspectedBaseInfo {\n data = typeof data === 'object' ? data : {};\n let result = new InspectedBaseInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.machineIds)) {\n data[\"machineIds\"] = [];\n for (let item of this.machineIds)\n data[\"machineIds\"].push(item.toJSON());\n }\n data[\"reportItem\"] = this.reportItem;\n data[\"areaId\"] = this.areaId;\n data[\"version\"] = this.version;\n data[\"inspectionAt\"] = this.inspectionAt;\n if (Array.isArray(this.imageFileNames)) {\n data[\"imageFileNames\"] = [];\n for (let item of this.imageFileNames)\n data[\"imageFileNames\"].push(item);\n }\n return data; \n }\n\n clone(): InspectedBaseInfo {\n const json = this.toJSON();\n let result = new InspectedBaseInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IInspectedBaseInfo {\n machineIds?: KeyValueItemOfIntegerAndString[] | undefined;\n reportItem?: string | undefined;\n areaId: number;\n version?: string | undefined;\n inspectionAt: string;\n imageFileNames?: string[] | undefined;\n}\n\nexport class InspectedHeaderItem implements IInspectedHeaderItem {\n headerType!: number;\n inspectionValue?: string | undefined;\n\n constructor(data?: IInspectedHeaderItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.headerType = _data[\"headerType\"];\n this.inspectionValue = _data[\"inspectionValue\"];\n }\n }\n\n static fromJS(data: any): InspectedHeaderItem {\n data = typeof data === 'object' ? data : {};\n let result = new InspectedHeaderItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"headerType\"] = this.headerType;\n data[\"inspectionValue\"] = this.inspectionValue;\n return data; \n }\n\n clone(): InspectedHeaderItem {\n const json = this.toJSON();\n let result = new InspectedHeaderItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IInspectedHeaderItem {\n headerType: number;\n inspectionValue?: string | undefined;\n}\n\nexport class InspectedDataItem implements IInspectedDataItem {\n divisionName?: string | undefined;\n name?: string | undefined;\n result?: string | undefined;\n value?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n\n constructor(data?: IInspectedDataItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.divisionName = _data[\"divisionName\"];\n this.name = _data[\"name\"];\n this.result = _data[\"result\"];\n this.value = _data[\"value\"];\n this.unit = _data[\"unit\"];\n this.inputThresh = _data[\"inputThresh\"] ? Threshold.fromJS(_data[\"inputThresh\"]) : undefined;\n this.lightAlarmThresh = _data[\"lightAlarmThresh\"] ? Threshold.fromJS(_data[\"lightAlarmThresh\"]) : undefined;\n this.heavyAlarmThresh = _data[\"heavyAlarmThresh\"] ? Threshold.fromJS(_data[\"heavyAlarmThresh\"]) : undefined;\n this.remarks = _data[\"remarks\"];\n }\n }\n\n static fromJS(data: any): InspectedDataItem {\n data = typeof data === 'object' ? data : {};\n let result = new InspectedDataItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"divisionName\"] = this.divisionName;\n data[\"name\"] = this.name;\n data[\"result\"] = this.result;\n data[\"value\"] = this.value;\n data[\"unit\"] = this.unit;\n data[\"inputThresh\"] = this.inputThresh ? this.inputThresh.toJSON() : undefined;\n data[\"lightAlarmThresh\"] = this.lightAlarmThresh ? this.lightAlarmThresh.toJSON() : undefined;\n data[\"heavyAlarmThresh\"] = this.heavyAlarmThresh ? this.heavyAlarmThresh.toJSON() : undefined;\n data[\"remarks\"] = this.remarks;\n return data; \n }\n\n clone(): InspectedDataItem {\n const json = this.toJSON();\n let result = new InspectedDataItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IInspectedDataItem {\n divisionName?: string | undefined;\n name?: string | undefined;\n result?: string | undefined;\n value?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n}\n\nexport class SaveWeeklyInspectionOutput extends ErrorOutput2 implements ISaveWeeklyInspectionOutput {\n reportNo?: string | undefined;\n\n constructor(data?: ISaveWeeklyInspectionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): SaveWeeklyInspectionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveWeeklyInspectionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveWeeklyInspectionOutput {\n const json = this.toJSON();\n let result = new SaveWeeklyInspectionOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveWeeklyInspectionOutput extends IErrorOutput2 {\n reportNo?: string | undefined;\n}\n\nexport class SaveWeeklyInspectionInput extends InputBase implements ISaveWeeklyInspectionInput {\n baseInfo?: InspectedBaseInfo | undefined;\n headers?: InspectedHeaderItem[] | undefined;\n datas?: InspectedDataItem[] | undefined;\n\n constructor(data?: ISaveWeeklyInspectionInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseInfo = _data[\"baseInfo\"] ? InspectedBaseInfo.fromJS(_data[\"baseInfo\"]) : undefined;\n if (Array.isArray(_data[\"headers\"])) {\n this.headers = [] as any;\n for (let item of _data[\"headers\"])\n this.headers!.push(InspectedHeaderItem.fromJS(item));\n }\n if (Array.isArray(_data[\"datas\"])) {\n this.datas = [] as any;\n for (let item of _data[\"datas\"])\n this.datas!.push(InspectedDataItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveWeeklyInspectionInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveWeeklyInspectionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseInfo\"] = this.baseInfo ? this.baseInfo.toJSON() : undefined;\n if (Array.isArray(this.headers)) {\n data[\"headers\"] = [];\n for (let item of this.headers)\n data[\"headers\"].push(item.toJSON());\n }\n if (Array.isArray(this.datas)) {\n data[\"datas\"] = [];\n for (let item of this.datas)\n data[\"datas\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveWeeklyInspectionInput {\n const json = this.toJSON();\n let result = new SaveWeeklyInspectionInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveWeeklyInspectionInput extends IInputBase {\n baseInfo?: InspectedBaseInfo | undefined;\n headers?: InspectedHeaderItem[] | undefined;\n datas?: InspectedDataItem[] | undefined;\n}\n\nexport class SaveCompletionInspectionOutput extends ErrorOutput2 implements ISaveCompletionInspectionOutput {\n reportNo?: string | undefined;\n\n constructor(data?: ISaveCompletionInspectionOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): SaveCompletionInspectionOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveCompletionInspectionOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveCompletionInspectionOutput {\n const json = this.toJSON();\n let result = new SaveCompletionInspectionOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveCompletionInspectionOutput extends IErrorOutput2 {\n reportNo?: string | undefined;\n}\n\nexport class SaveCompletionInspectionInput extends InputBase implements ISaveCompletionInspectionInput {\n baseInfo?: InspectedBaseInfo | undefined;\n headers?: InspectedHeaderItem[] | undefined;\n datas?: InspectedDataItem[] | undefined;\n\n constructor(data?: ISaveCompletionInspectionInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseInfo = _data[\"baseInfo\"] ? InspectedBaseInfo.fromJS(_data[\"baseInfo\"]) : undefined;\n if (Array.isArray(_data[\"headers\"])) {\n this.headers = [] as any;\n for (let item of _data[\"headers\"])\n this.headers!.push(InspectedHeaderItem.fromJS(item));\n }\n if (Array.isArray(_data[\"datas\"])) {\n this.datas = [] as any;\n for (let item of _data[\"datas\"])\n this.datas!.push(InspectedDataItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveCompletionInspectionInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveCompletionInspectionInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseInfo\"] = this.baseInfo ? this.baseInfo.toJSON() : undefined;\n if (Array.isArray(this.headers)) {\n data[\"headers\"] = [];\n for (let item of this.headers)\n data[\"headers\"].push(item.toJSON());\n }\n if (Array.isArray(this.datas)) {\n data[\"datas\"] = [];\n for (let item of this.datas)\n data[\"datas\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveCompletionInspectionInput {\n const json = this.toJSON();\n let result = new SaveCompletionInspectionInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveCompletionInspectionInput extends IInputBase {\n baseInfo?: InspectedBaseInfo | undefined;\n headers?: InspectedHeaderItem[] | undefined;\n datas?: InspectedDataItem[] | undefined;\n}\n\nexport class SaveMaintenanceOutput extends ErrorOutput2 implements ISaveMaintenanceOutput {\n reportNo?: string | undefined;\n isStamped!: boolean;\n\n constructor(data?: ISaveMaintenanceOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n this.isStamped = _data[\"isStamped\"];\n }\n }\n\n static fromJS(data: any): SaveMaintenanceOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMaintenanceOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n data[\"isStamped\"] = this.isStamped;\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMaintenanceOutput {\n const json = this.toJSON();\n let result = new SaveMaintenanceOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMaintenanceOutput extends IErrorOutput2 {\n reportNo?: string | undefined;\n isStamped: boolean;\n}\n\nexport class SaveMaintenanceInput extends InputBase implements ISaveMaintenanceInput {\n baseInfo?: MaintainedBaseInfo | undefined;\n headers?: MaintainedHeaderItem[] | undefined;\n datas?: MaintainedDataItem[] | undefined;\n\n constructor(data?: ISaveMaintenanceInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseInfo = _data[\"baseInfo\"] ? MaintainedBaseInfo.fromJS(_data[\"baseInfo\"]) : undefined;\n if (Array.isArray(_data[\"headers\"])) {\n this.headers = [] as any;\n for (let item of _data[\"headers\"])\n this.headers!.push(MaintainedHeaderItem.fromJS(item));\n }\n if (Array.isArray(_data[\"datas\"])) {\n this.datas = [] as any;\n for (let item of _data[\"datas\"])\n this.datas!.push(MaintainedDataItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveMaintenanceInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMaintenanceInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseInfo\"] = this.baseInfo ? this.baseInfo.toJSON() : undefined;\n if (Array.isArray(this.headers)) {\n data[\"headers\"] = [];\n for (let item of this.headers)\n data[\"headers\"].push(item.toJSON());\n }\n if (Array.isArray(this.datas)) {\n data[\"datas\"] = [];\n for (let item of this.datas)\n data[\"datas\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMaintenanceInput {\n const json = this.toJSON();\n let result = new SaveMaintenanceInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMaintenanceInput extends IInputBase {\n baseInfo?: MaintainedBaseInfo | undefined;\n headers?: MaintainedHeaderItem[] | undefined;\n datas?: MaintainedDataItem[] | undefined;\n}\n\nexport class MaintainedBaseInfo implements IMaintainedBaseInfo {\n maintenanceReportNo?: string | undefined;\n machineId?: string | undefined;\n machineType!: number;\n areaId!: number;\n version?: string | undefined;\n reportItem?: string | undefined;\n maintenanceAt!: string;\n worker?: string | undefined;\n imageFileNames?: string[] | undefined;\n isStamped!: boolean;\n\n constructor(data?: IMaintainedBaseInfo) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.maintenanceReportNo = _data[\"maintenanceReportNo\"];\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n this.areaId = _data[\"areaId\"];\n this.version = _data[\"version\"];\n this.reportItem = _data[\"reportItem\"];\n this.maintenanceAt = _data[\"maintenanceAt\"];\n this.worker = _data[\"worker\"];\n if (Array.isArray(_data[\"imageFileNames\"])) {\n this.imageFileNames = [] as any;\n for (let item of _data[\"imageFileNames\"])\n this.imageFileNames!.push(item);\n }\n this.isStamped = _data[\"isStamped\"];\n }\n }\n\n static fromJS(data: any): MaintainedBaseInfo {\n data = typeof data === 'object' ? data : {};\n let result = new MaintainedBaseInfo();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"maintenanceReportNo\"] = this.maintenanceReportNo;\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n data[\"areaId\"] = this.areaId;\n data[\"version\"] = this.version;\n data[\"reportItem\"] = this.reportItem;\n data[\"maintenanceAt\"] = this.maintenanceAt;\n data[\"worker\"] = this.worker;\n if (Array.isArray(this.imageFileNames)) {\n data[\"imageFileNames\"] = [];\n for (let item of this.imageFileNames)\n data[\"imageFileNames\"].push(item);\n }\n data[\"isStamped\"] = this.isStamped;\n return data; \n }\n\n clone(): MaintainedBaseInfo {\n const json = this.toJSON();\n let result = new MaintainedBaseInfo();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintainedBaseInfo {\n maintenanceReportNo?: string | undefined;\n machineId?: string | undefined;\n machineType: number;\n areaId: number;\n version?: string | undefined;\n reportItem?: string | undefined;\n maintenanceAt: string;\n worker?: string | undefined;\n imageFileNames?: string[] | undefined;\n isStamped: boolean;\n}\n\nexport class MaintainedHeaderItem implements IMaintainedHeaderItem {\n headerType!: number;\n maintenanceValue?: string | undefined;\n\n constructor(data?: IMaintainedHeaderItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.headerType = _data[\"headerType\"];\n this.maintenanceValue = _data[\"maintenanceValue\"];\n }\n }\n\n static fromJS(data: any): MaintainedHeaderItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintainedHeaderItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"headerType\"] = this.headerType;\n data[\"maintenanceValue\"] = this.maintenanceValue;\n return data; \n }\n\n clone(): MaintainedHeaderItem {\n const json = this.toJSON();\n let result = new MaintainedHeaderItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintainedHeaderItem {\n headerType: number;\n maintenanceValue?: string | undefined;\n}\n\nexport class MaintainedDataItem implements IMaintainedDataItem {\n divisionName?: string | undefined;\n name?: string | undefined;\n results?: MaintainedResultItem[] | undefined;\n value?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n\n constructor(data?: IMaintainedDataItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.divisionName = _data[\"divisionName\"];\n this.name = _data[\"name\"];\n if (Array.isArray(_data[\"results\"])) {\n this.results = [] as any;\n for (let item of _data[\"results\"])\n this.results!.push(MaintainedResultItem.fromJS(item));\n }\n this.value = _data[\"value\"];\n this.unit = _data[\"unit\"];\n this.inputThresh = _data[\"inputThresh\"] ? Threshold.fromJS(_data[\"inputThresh\"]) : undefined;\n this.lightAlarmThresh = _data[\"lightAlarmThresh\"] ? Threshold.fromJS(_data[\"lightAlarmThresh\"]) : undefined;\n this.heavyAlarmThresh = _data[\"heavyAlarmThresh\"] ? Threshold.fromJS(_data[\"heavyAlarmThresh\"]) : undefined;\n this.remarks = _data[\"remarks\"];\n }\n }\n\n static fromJS(data: any): MaintainedDataItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintainedDataItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"divisionName\"] = this.divisionName;\n data[\"name\"] = this.name;\n if (Array.isArray(this.results)) {\n data[\"results\"] = [];\n for (let item of this.results)\n data[\"results\"].push(item.toJSON());\n }\n data[\"value\"] = this.value;\n data[\"unit\"] = this.unit;\n data[\"inputThresh\"] = this.inputThresh ? this.inputThresh.toJSON() : undefined;\n data[\"lightAlarmThresh\"] = this.lightAlarmThresh ? this.lightAlarmThresh.toJSON() : undefined;\n data[\"heavyAlarmThresh\"] = this.heavyAlarmThresh ? this.heavyAlarmThresh.toJSON() : undefined;\n data[\"remarks\"] = this.remarks;\n return data; \n }\n\n clone(): MaintainedDataItem {\n const json = this.toJSON();\n let result = new MaintainedDataItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintainedDataItem {\n divisionName?: string | undefined;\n name?: string | undefined;\n results?: MaintainedResultItem[] | undefined;\n value?: string | undefined;\n unit?: string | undefined;\n inputThresh?: Threshold | undefined;\n lightAlarmThresh?: Threshold | undefined;\n heavyAlarmThresh?: Threshold | undefined;\n remarks?: string | undefined;\n}\n\nexport class MaintainedResultItem implements IMaintainedResultItem {\n result?: string | undefined;\n resultStatus!: number;\n\n constructor(data?: IMaintainedResultItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.result = _data[\"result\"];\n this.resultStatus = _data[\"resultStatus\"];\n }\n }\n\n static fromJS(data: any): MaintainedResultItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintainedResultItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"result\"] = this.result;\n data[\"resultStatus\"] = this.resultStatus;\n return data; \n }\n\n clone(): MaintainedResultItem {\n const json = this.toJSON();\n let result = new MaintainedResultItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintainedResultItem {\n result?: string | undefined;\n resultStatus: number;\n}\n\nexport class SaveOtherReportOutput extends ErrorOutput2 implements ISaveOtherReportOutput {\n reportNo?: string | undefined;\n\n constructor(data?: ISaveOtherReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): SaveOtherReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveOtherReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportNo\"] = this.reportNo;\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveOtherReportOutput {\n const json = this.toJSON();\n let result = new SaveOtherReportOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveOtherReportOutput extends IErrorOutput2 {\n reportNo?: string | undefined;\n}\n\nexport class SaveOtherReportInput extends InputBase implements ISaveOtherReportInput {\n reportItem?: string | undefined;\n areaId!: number;\n reportAt!: string;\n reporterName?: string | undefined;\n siteName?: string | undefined;\n imageFileNames?: string[] | undefined;\n\n constructor(data?: ISaveOtherReportInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.reportItem = _data[\"reportItem\"];\n this.areaId = _data[\"areaId\"];\n this.reportAt = _data[\"reportAt\"];\n this.reporterName = _data[\"reporterName\"];\n this.siteName = _data[\"siteName\"];\n if (Array.isArray(_data[\"imageFileNames\"])) {\n this.imageFileNames = [] as any;\n for (let item of _data[\"imageFileNames\"])\n this.imageFileNames!.push(item);\n }\n }\n }\n\n static fromJS(data: any): SaveOtherReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveOtherReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"reportItem\"] = this.reportItem;\n data[\"areaId\"] = this.areaId;\n data[\"reportAt\"] = this.reportAt;\n data[\"reporterName\"] = this.reporterName;\n data[\"siteName\"] = this.siteName;\n if (Array.isArray(this.imageFileNames)) {\n data[\"imageFileNames\"] = [];\n for (let item of this.imageFileNames)\n data[\"imageFileNames\"].push(item);\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveOtherReportInput {\n const json = this.toJSON();\n let result = new SaveOtherReportInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveOtherReportInput extends IInputBase {\n reportItem?: string | undefined;\n areaId: number;\n reportAt: string;\n reporterName?: string | undefined;\n siteName?: string | undefined;\n imageFileNames?: string[] | undefined;\n}\n\nexport class SaveMachineStatusOutput extends ErrorOutput2 implements ISaveMachineStatusOutput {\n\n constructor(data?: ISaveMachineStatusOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): SaveMachineStatusOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMachineStatusOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMachineStatusOutput {\n const json = this.toJSON();\n let result = new SaveMachineStatusOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMachineStatusOutput extends IErrorOutput2 {\n}\n\nexport class SaveMachineStatusInput extends InputBase implements ISaveMachineStatusInput {\n baseMachineId?: string | undefined;\n isValidData!: boolean;\n machineStatusId?: number | undefined;\n registerAt!: string;\n items?: KeyValueItemOfIntegerAndString[] | undefined;\n\n constructor(data?: ISaveMachineStatusInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseMachineId = _data[\"baseMachineId\"];\n this.isValidData = _data[\"isValidData\"];\n this.machineStatusId = _data[\"machineStatusId\"];\n this.registerAt = _data[\"registerAt\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveMachineStatusInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMachineStatusInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseMachineId\"] = this.baseMachineId;\n data[\"isValidData\"] = this.isValidData;\n data[\"machineStatusId\"] = this.machineStatusId;\n data[\"registerAt\"] = this.registerAt;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMachineStatusInput {\n const json = this.toJSON();\n let result = new SaveMachineStatusInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMachineStatusInput extends IInputBase {\n baseMachineId?: string | undefined;\n isValidData: boolean;\n machineStatusId?: number | undefined;\n registerAt: string;\n items?: KeyValueItemOfIntegerAndString[] | undefined;\n}\n\nexport class SaveMachineErrorHistoryOutput extends ErrorOutput2 implements ISaveMachineErrorHistoryOutput {\n\n constructor(data?: ISaveMachineErrorHistoryOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): SaveMachineErrorHistoryOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMachineErrorHistoryOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMachineErrorHistoryOutput {\n const json = this.toJSON();\n let result = new SaveMachineErrorHistoryOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMachineErrorHistoryOutput extends IErrorOutput2 {\n}\n\nexport class SaveMachineErrorHistoryInput extends InputBase implements ISaveMachineErrorHistoryInput {\n baseMachineId?: string | undefined;\n errors?: KeyValueItemOfDateTimeOffsetAndInteger[] | undefined;\n\n constructor(data?: ISaveMachineErrorHistoryInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseMachineId = _data[\"baseMachineId\"];\n if (Array.isArray(_data[\"errors\"])) {\n this.errors = [] as any;\n for (let item of _data[\"errors\"])\n this.errors!.push(KeyValueItemOfDateTimeOffsetAndInteger.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveMachineErrorHistoryInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMachineErrorHistoryInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseMachineId\"] = this.baseMachineId;\n if (Array.isArray(this.errors)) {\n data[\"errors\"] = [];\n for (let item of this.errors)\n data[\"errors\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMachineErrorHistoryInput {\n const json = this.toJSON();\n let result = new SaveMachineErrorHistoryInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMachineErrorHistoryInput extends IInputBase {\n baseMachineId?: string | undefined;\n errors?: KeyValueItemOfDateTimeOffsetAndInteger[] | undefined;\n}\n\nexport class KeyValueItemOfDateTimeOffsetAndInteger implements IKeyValueItemOfDateTimeOffsetAndInteger {\n key!: string;\n value!: number;\n\n constructor(data?: IKeyValueItemOfDateTimeOffsetAndInteger) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValueItemOfDateTimeOffsetAndInteger {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfDateTimeOffsetAndInteger();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValueItemOfDateTimeOffsetAndInteger {\n const json = this.toJSON();\n let result = new KeyValueItemOfDateTimeOffsetAndInteger();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfDateTimeOffsetAndInteger {\n key: string;\n value: number;\n}\n\nexport class GetDocumentOutput extends ErrorOutput2 implements IGetDocumentOutput {\n items?: DocumentItem[] | undefined;\n\n constructor(data?: IGetDocumentOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(DocumentItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetDocumentOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDocumentOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetDocumentOutput {\n const json = this.toJSON();\n let result = new GetDocumentOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetDocumentOutput extends IErrorOutput2 {\n items?: DocumentItem[] | undefined;\n}\n\nexport class DocumentItem implements IDocumentItem {\n groupName?: string | undefined;\n name?: string | undefined;\n url?: string | undefined;\n\n constructor(data?: IDocumentItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.groupName = _data[\"groupName\"];\n this.name = _data[\"name\"];\n this.url = _data[\"url\"];\n }\n }\n\n static fromJS(data: any): DocumentItem {\n data = typeof data === 'object' ? data : {};\n let result = new DocumentItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"groupName\"] = this.groupName;\n data[\"name\"] = this.name;\n data[\"url\"] = this.url;\n return data; \n }\n\n clone(): DocumentItem {\n const json = this.toJSON();\n let result = new DocumentItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IDocumentItem {\n groupName?: string | undefined;\n name?: string | undefined;\n url?: string | undefined;\n}\n\nexport class GetDocumentInput extends InputBase implements IGetDocumentInput {\n\n constructor(data?: IGetDocumentInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): GetDocumentInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDocumentInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): GetDocumentInput {\n const json = this.toJSON();\n let result = new GetDocumentInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetDocumentInput extends IInputBase {\n}\n\nexport class GetMaintenanceOutput extends ErrorOutput2 implements IGetMaintenanceOutput {\n baseInfo?: MaintainedBaseInfo | undefined;\n headers?: MaintainedHeaderItem[] | undefined;\n datas?: MaintainedDataItem[] | undefined;\n\n constructor(data?: IGetMaintenanceOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseInfo = _data[\"baseInfo\"] ? MaintainedBaseInfo.fromJS(_data[\"baseInfo\"]) : undefined;\n if (Array.isArray(_data[\"headers\"])) {\n this.headers = [] as any;\n for (let item of _data[\"headers\"])\n this.headers!.push(MaintainedHeaderItem.fromJS(item));\n }\n if (Array.isArray(_data[\"datas\"])) {\n this.datas = [] as any;\n for (let item of _data[\"datas\"])\n this.datas!.push(MaintainedDataItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetMaintenanceOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseInfo\"] = this.baseInfo ? this.baseInfo.toJSON() : undefined;\n if (Array.isArray(this.headers)) {\n data[\"headers\"] = [];\n for (let item of this.headers)\n data[\"headers\"].push(item.toJSON());\n }\n if (Array.isArray(this.datas)) {\n data[\"datas\"] = [];\n for (let item of this.datas)\n data[\"datas\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenanceOutput {\n const json = this.toJSON();\n let result = new GetMaintenanceOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetMaintenanceOutput extends IErrorOutput2 {\n baseInfo?: MaintainedBaseInfo | undefined;\n headers?: MaintainedHeaderItem[] | undefined;\n datas?: MaintainedDataItem[] | undefined;\n}\n\nexport class GetMaintenanceInput extends InputBase implements IGetMaintenanceInput {\n machineId?: string | undefined;\n machineType!: number;\n\n constructor(data?: IGetMaintenanceInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n }\n }\n\n static fromJS(data: any): GetMaintenanceInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenanceInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenanceInput {\n const json = this.toJSON();\n let result = new GetMaintenanceInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetMaintenanceInput extends IInputBase {\n machineId?: string | undefined;\n machineType: number;\n}\n\nexport class GetReportOutput extends ErrorOutput2 implements IGetReportOutput {\n dailyInspectionReports?: DailyInspectionReportItem[] | undefined;\n weeklyInspectionReports?: WeeklyInspectionReportItem[] | undefined;\n completionInspectionReports?: CompletionInspectionReportItem[] | undefined;\n maintenanceBaseMachineReports?: MaintenanceBaseMachineReportItem[] | undefined;\n maintenanceAugerReports?: MaintenanceAugerReportItem[] | undefined;\n maintenanceLiftReports?: MaintenanceLiftReportItem[] | undefined;\n\n constructor(data?: IGetReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"dailyInspectionReports\"])) {\n this.dailyInspectionReports = [] as any;\n for (let item of _data[\"dailyInspectionReports\"])\n this.dailyInspectionReports!.push(DailyInspectionReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"weeklyInspectionReports\"])) {\n this.weeklyInspectionReports = [] as any;\n for (let item of _data[\"weeklyInspectionReports\"])\n this.weeklyInspectionReports!.push(WeeklyInspectionReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"completionInspectionReports\"])) {\n this.completionInspectionReports = [] as any;\n for (let item of _data[\"completionInspectionReports\"])\n this.completionInspectionReports!.push(CompletionInspectionReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"maintenanceBaseMachineReports\"])) {\n this.maintenanceBaseMachineReports = [] as any;\n for (let item of _data[\"maintenanceBaseMachineReports\"])\n this.maintenanceBaseMachineReports!.push(MaintenanceBaseMachineReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"maintenanceAugerReports\"])) {\n this.maintenanceAugerReports = [] as any;\n for (let item of _data[\"maintenanceAugerReports\"])\n this.maintenanceAugerReports!.push(MaintenanceAugerReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"maintenanceLiftReports\"])) {\n this.maintenanceLiftReports = [] as any;\n for (let item of _data[\"maintenanceLiftReports\"])\n this.maintenanceLiftReports!.push(MaintenanceLiftReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.dailyInspectionReports)) {\n data[\"dailyInspectionReports\"] = [];\n for (let item of this.dailyInspectionReports)\n data[\"dailyInspectionReports\"].push(item.toJSON());\n }\n if (Array.isArray(this.weeklyInspectionReports)) {\n data[\"weeklyInspectionReports\"] = [];\n for (let item of this.weeklyInspectionReports)\n data[\"weeklyInspectionReports\"].push(item.toJSON());\n }\n if (Array.isArray(this.completionInspectionReports)) {\n data[\"completionInspectionReports\"] = [];\n for (let item of this.completionInspectionReports)\n data[\"completionInspectionReports\"].push(item.toJSON());\n }\n if (Array.isArray(this.maintenanceBaseMachineReports)) {\n data[\"maintenanceBaseMachineReports\"] = [];\n for (let item of this.maintenanceBaseMachineReports)\n data[\"maintenanceBaseMachineReports\"].push(item.toJSON());\n }\n if (Array.isArray(this.maintenanceAugerReports)) {\n data[\"maintenanceAugerReports\"] = [];\n for (let item of this.maintenanceAugerReports)\n data[\"maintenanceAugerReports\"].push(item.toJSON());\n }\n if (Array.isArray(this.maintenanceLiftReports)) {\n data[\"maintenanceLiftReports\"] = [];\n for (let item of this.maintenanceLiftReports)\n data[\"maintenanceLiftReports\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetReportOutput {\n const json = this.toJSON();\n let result = new GetReportOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetReportOutput extends IErrorOutput2 {\n dailyInspectionReports?: DailyInspectionReportItem[] | undefined;\n weeklyInspectionReports?: WeeklyInspectionReportItem[] | undefined;\n completionInspectionReports?: CompletionInspectionReportItem[] | undefined;\n maintenanceBaseMachineReports?: MaintenanceBaseMachineReportItem[] | undefined;\n maintenanceAugerReports?: MaintenanceAugerReportItem[] | undefined;\n maintenanceLiftReports?: MaintenanceLiftReportItem[] | undefined;\n}\n\nexport abstract class ReportItemBase implements IReportItemBase {\n title?: string | undefined;\n reportNo?: string | undefined;\n reportVersion?: string | undefined;\n report?: string | undefined;\n updatedAt?: string | undefined;\n imageFiles?: string[] | undefined;\n\n constructor(data?: IReportItemBase) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.title = _data[\"title\"];\n this.reportNo = _data[\"reportNo\"];\n this.reportVersion = _data[\"reportVersion\"];\n this.report = _data[\"report\"];\n this.updatedAt = _data[\"updatedAt\"];\n if (Array.isArray(_data[\"imageFiles\"])) {\n this.imageFiles = [] as any;\n for (let item of _data[\"imageFiles\"])\n this.imageFiles!.push(item);\n }\n }\n }\n\n static fromJS(data: any): ReportItemBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'ReportItemBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"title\"] = this.title;\n data[\"reportNo\"] = this.reportNo;\n data[\"reportVersion\"] = this.reportVersion;\n data[\"report\"] = this.report;\n data[\"updatedAt\"] = this.updatedAt;\n if (Array.isArray(this.imageFiles)) {\n data[\"imageFiles\"] = [];\n for (let item of this.imageFiles)\n data[\"imageFiles\"].push(item);\n }\n return data; \n }\n\n clone(): ReportItemBase {\n throw new Error(\"The abstract class 'ReportItemBase' cannot be instantiated.\");\n }\n}\n\nexport interface IReportItemBase {\n title?: string | undefined;\n reportNo?: string | undefined;\n reportVersion?: string | undefined;\n report?: string | undefined;\n updatedAt?: string | undefined;\n imageFiles?: string[] | undefined;\n}\n\nexport class DailyInspectionReportItem extends ReportItemBase implements IDailyInspectionReportItem {\n usePlace?: string | undefined;\n machineNameEtc?: string | undefined;\n inspectedAt?: string | undefined;\n dayOfWeekDatas?: KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem[] | undefined;\n divisions?: DailyInspectionDivisionReportItem[] | undefined;\n\n constructor(data?: IDailyInspectionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.usePlace = _data[\"usePlace\"];\n this.machineNameEtc = _data[\"machineNameEtc\"];\n this.inspectedAt = _data[\"inspectedAt\"];\n if (Array.isArray(_data[\"dayOfWeekDatas\"])) {\n this.dayOfWeekDatas = [] as any;\n for (let item of _data[\"dayOfWeekDatas\"])\n this.dayOfWeekDatas!.push(KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(DailyInspectionDivisionReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): DailyInspectionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new DailyInspectionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"usePlace\"] = this.usePlace;\n data[\"machineNameEtc\"] = this.machineNameEtc;\n data[\"inspectedAt\"] = this.inspectedAt;\n if (Array.isArray(this.dayOfWeekDatas)) {\n data[\"dayOfWeekDatas\"] = [];\n for (let item of this.dayOfWeekDatas)\n data[\"dayOfWeekDatas\"].push(item.toJSON());\n }\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): DailyInspectionReportItem {\n const json = this.toJSON();\n let result = new DailyInspectionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IDailyInspectionReportItem extends IReportItemBase {\n usePlace?: string | undefined;\n machineNameEtc?: string | undefined;\n inspectedAt?: string | undefined;\n dayOfWeekDatas?: KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem[] | undefined;\n divisions?: DailyInspectionDivisionReportItem[] | undefined;\n}\n\nexport class KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem implements IKeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem {\n key!: DayOfWeek;\n value?: DailyInspectionDayOfWeekReportItem | undefined;\n\n constructor(data?: IKeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? DailyInspectionDayOfWeekReportItem.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfDayOfWeekAndDailyInspectionDayOfWeekReportItem {\n key: DayOfWeek;\n value?: DailyInspectionDayOfWeekReportItem | undefined;\n}\n\nexport class DailyInspectionDayOfWeekReportItem implements IDailyInspectionDayOfWeekReportItem {\n day?: string | undefined;\n worker?: string | undefined;\n inspector?: string | undefined;\n reportNo?: string | undefined;\n\n constructor(data?: IDailyInspectionDayOfWeekReportItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.day = _data[\"day\"];\n this.worker = _data[\"worker\"];\n this.inspector = _data[\"inspector\"];\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): DailyInspectionDayOfWeekReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new DailyInspectionDayOfWeekReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"day\"] = this.day;\n data[\"worker\"] = this.worker;\n data[\"inspector\"] = this.inspector;\n data[\"reportNo\"] = this.reportNo;\n return data; \n }\n\n clone(): DailyInspectionDayOfWeekReportItem {\n const json = this.toJSON();\n let result = new DailyInspectionDayOfWeekReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IDailyInspectionDayOfWeekReportItem {\n day?: string | undefined;\n worker?: string | undefined;\n inspector?: string | undefined;\n reportNo?: string | undefined;\n}\n\nexport abstract class DivisionReportItemBase implements IDivisionReportItemBase {\n divisionName?: string | undefined;\n itemNo?: string | undefined;\n itemName?: string | undefined;\n value?: string | undefined;\n\n constructor(data?: IDivisionReportItemBase) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.divisionName = _data[\"divisionName\"];\n this.itemNo = _data[\"itemNo\"];\n this.itemName = _data[\"itemName\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): DivisionReportItemBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'DivisionReportItemBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"divisionName\"] = this.divisionName;\n data[\"itemNo\"] = this.itemNo;\n data[\"itemName\"] = this.itemName;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): DivisionReportItemBase {\n throw new Error(\"The abstract class 'DivisionReportItemBase' cannot be instantiated.\");\n }\n}\n\nexport interface IDivisionReportItemBase {\n divisionName?: string | undefined;\n itemNo?: string | undefined;\n itemName?: string | undefined;\n value?: string | undefined;\n}\n\nexport class DailyInspectionDivisionReportItem extends DivisionReportItemBase implements IDailyInspectionDivisionReportItem {\n results?: KeyValueItemOfDayOfWeekAndString[] | undefined;\n\n constructor(data?: IDailyInspectionDivisionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"results\"])) {\n this.results = [] as any;\n for (let item of _data[\"results\"])\n this.results!.push(KeyValueItemOfDayOfWeekAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): DailyInspectionDivisionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new DailyInspectionDivisionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.results)) {\n data[\"results\"] = [];\n for (let item of this.results)\n data[\"results\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): DailyInspectionDivisionReportItem {\n const json = this.toJSON();\n let result = new DailyInspectionDivisionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IDailyInspectionDivisionReportItem extends IDivisionReportItemBase {\n results?: KeyValueItemOfDayOfWeekAndString[] | undefined;\n}\n\nexport class KeyValueItemOfDayOfWeekAndString implements IKeyValueItemOfDayOfWeekAndString {\n key!: DayOfWeek;\n value?: string | undefined;\n\n constructor(data?: IKeyValueItemOfDayOfWeekAndString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValueItemOfDayOfWeekAndString {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfDayOfWeekAndString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValueItemOfDayOfWeekAndString {\n const json = this.toJSON();\n let result = new KeyValueItemOfDayOfWeekAndString();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfDayOfWeekAndString {\n key: DayOfWeek;\n value?: string | undefined;\n}\n\nexport class WeeklyInspectionReportItem extends ReportItemBase implements IWeeklyInspectionReportItem {\n usePlace?: string | undefined;\n machineNameEtc?: string | undefined;\n inspectedAt?: string | undefined;\n weekOfMonthDatas?: KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem[] | undefined;\n divisions?: WeeklyInspectionDivisionReportItem[] | undefined;\n\n constructor(data?: IWeeklyInspectionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.usePlace = _data[\"usePlace\"];\n this.machineNameEtc = _data[\"machineNameEtc\"];\n this.inspectedAt = _data[\"inspectedAt\"];\n if (Array.isArray(_data[\"weekOfMonthDatas\"])) {\n this.weekOfMonthDatas = [] as any;\n for (let item of _data[\"weekOfMonthDatas\"])\n this.weekOfMonthDatas!.push(KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem.fromJS(item));\n }\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(WeeklyInspectionDivisionReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): WeeklyInspectionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new WeeklyInspectionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"usePlace\"] = this.usePlace;\n data[\"machineNameEtc\"] = this.machineNameEtc;\n data[\"inspectedAt\"] = this.inspectedAt;\n if (Array.isArray(this.weekOfMonthDatas)) {\n data[\"weekOfMonthDatas\"] = [];\n for (let item of this.weekOfMonthDatas)\n data[\"weekOfMonthDatas\"].push(item.toJSON());\n }\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): WeeklyInspectionReportItem {\n const json = this.toJSON();\n let result = new WeeklyInspectionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IWeeklyInspectionReportItem extends IReportItemBase {\n usePlace?: string | undefined;\n machineNameEtc?: string | undefined;\n inspectedAt?: string | undefined;\n weekOfMonthDatas?: KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem[] | undefined;\n divisions?: WeeklyInspectionDivisionReportItem[] | undefined;\n}\n\nexport class KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem implements IKeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem {\n key!: WeekOfMonth;\n value?: WeeklyInspectionWeekOfMonthReportItem | undefined;\n\n constructor(data?: IKeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"] ? WeeklyInspectionWeekOfMonthReportItem.fromJS(_data[\"value\"]) : undefined;\n }\n }\n\n static fromJS(data: any): KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data; \n }\n\n clone(): KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem {\n const json = this.toJSON();\n let result = new KeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfWeekOfMonthAndWeeklyInspectionWeekOfMonthReportItem {\n key: WeekOfMonth;\n value?: WeeklyInspectionWeekOfMonthReportItem | undefined;\n}\n\nexport class WeeklyInspectionWeekOfMonthReportItem implements IWeeklyInspectionWeekOfMonthReportItem {\n day?: string | undefined;\n dayOfWeek?: DayOfWeek | undefined;\n worker?: string | undefined;\n inspector?: string | undefined;\n reportNo?: string | undefined;\n\n constructor(data?: IWeeklyInspectionWeekOfMonthReportItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.day = _data[\"day\"];\n this.dayOfWeek = _data[\"dayOfWeek\"];\n this.worker = _data[\"worker\"];\n this.inspector = _data[\"inspector\"];\n this.reportNo = _data[\"reportNo\"];\n }\n }\n\n static fromJS(data: any): WeeklyInspectionWeekOfMonthReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new WeeklyInspectionWeekOfMonthReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"day\"] = this.day;\n data[\"dayOfWeek\"] = this.dayOfWeek;\n data[\"worker\"] = this.worker;\n data[\"inspector\"] = this.inspector;\n data[\"reportNo\"] = this.reportNo;\n return data; \n }\n\n clone(): WeeklyInspectionWeekOfMonthReportItem {\n const json = this.toJSON();\n let result = new WeeklyInspectionWeekOfMonthReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IWeeklyInspectionWeekOfMonthReportItem {\n day?: string | undefined;\n dayOfWeek?: DayOfWeek | undefined;\n worker?: string | undefined;\n inspector?: string | undefined;\n reportNo?: string | undefined;\n}\n\nexport class WeeklyInspectionDivisionReportItem extends DivisionReportItemBase implements IWeeklyInspectionDivisionReportItem {\n results?: KeyValueItemOfIntegerAndString[] | undefined;\n\n constructor(data?: IWeeklyInspectionDivisionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"results\"])) {\n this.results = [] as any;\n for (let item of _data[\"results\"])\n this.results!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): WeeklyInspectionDivisionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new WeeklyInspectionDivisionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.results)) {\n data[\"results\"] = [];\n for (let item of this.results)\n data[\"results\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): WeeklyInspectionDivisionReportItem {\n const json = this.toJSON();\n let result = new WeeklyInspectionDivisionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IWeeklyInspectionDivisionReportItem extends IDivisionReportItemBase {\n results?: KeyValueItemOfIntegerAndString[] | undefined;\n}\n\nexport class CompletionInspectionReportItem extends ReportItemBase implements ICompletionInspectionReportItem {\n usePlace?: string | undefined;\n method?: string | undefined;\n inspectedRange?: string | undefined;\n worker?: string | undefined;\n inspector?: string | undefined;\n machineId?: string | undefined;\n hrMeter?: string | undefined;\n divisions?: CompletionInspectionDivisionReportItem[] | undefined;\n\n constructor(data?: ICompletionInspectionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.usePlace = _data[\"usePlace\"];\n this.method = _data[\"method\"];\n this.inspectedRange = _data[\"inspectedRange\"];\n this.worker = _data[\"worker\"];\n this.inspector = _data[\"inspector\"];\n this.machineId = _data[\"machineId\"];\n this.hrMeter = _data[\"hrMeter\"];\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(CompletionInspectionDivisionReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): CompletionInspectionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new CompletionInspectionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"usePlace\"] = this.usePlace;\n data[\"method\"] = this.method;\n data[\"inspectedRange\"] = this.inspectedRange;\n data[\"worker\"] = this.worker;\n data[\"inspector\"] = this.inspector;\n data[\"machineId\"] = this.machineId;\n data[\"hrMeter\"] = this.hrMeter;\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): CompletionInspectionReportItem {\n const json = this.toJSON();\n let result = new CompletionInspectionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface ICompletionInspectionReportItem extends IReportItemBase {\n usePlace?: string | undefined;\n method?: string | undefined;\n inspectedRange?: string | undefined;\n worker?: string | undefined;\n inspector?: string | undefined;\n machineId?: string | undefined;\n hrMeter?: string | undefined;\n divisions?: CompletionInspectionDivisionReportItem[] | undefined;\n}\n\nexport class CompletionInspectionDivisionReportItem extends DivisionReportItemBase implements ICompletionInspectionDivisionReportItem {\n results?: KeyValueItemOfCompletionReportResultStatusAndString[] | undefined;\n\n constructor(data?: ICompletionInspectionDivisionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"results\"])) {\n this.results = [] as any;\n for (let item of _data[\"results\"])\n this.results!.push(KeyValueItemOfCompletionReportResultStatusAndString.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): CompletionInspectionDivisionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new CompletionInspectionDivisionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.results)) {\n data[\"results\"] = [];\n for (let item of this.results)\n data[\"results\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): CompletionInspectionDivisionReportItem {\n const json = this.toJSON();\n let result = new CompletionInspectionDivisionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface ICompletionInspectionDivisionReportItem extends IDivisionReportItemBase {\n results?: KeyValueItemOfCompletionReportResultStatusAndString[] | undefined;\n}\n\nexport class KeyValueItemOfCompletionReportResultStatusAndString implements IKeyValueItemOfCompletionReportResultStatusAndString {\n key!: CompletionReportResultStatus;\n value?: string | undefined;\n\n constructor(data?: IKeyValueItemOfCompletionReportResultStatusAndString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): KeyValueItemOfCompletionReportResultStatusAndString {\n data = typeof data === 'object' ? data : {};\n let result = new KeyValueItemOfCompletionReportResultStatusAndString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"key\"] = this.key;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): KeyValueItemOfCompletionReportResultStatusAndString {\n const json = this.toJSON();\n let result = new KeyValueItemOfCompletionReportResultStatusAndString();\n result.init(json);\n return result;\n }\n}\n\nexport interface IKeyValueItemOfCompletionReportResultStatusAndString {\n key: CompletionReportResultStatus;\n value?: string | undefined;\n}\n\nexport enum CompletionReportResultStatus {\n Good = 1,\n Bad = 2,\n}\n\nexport abstract class MaintenanceReportItemBase extends ReportItemBase implements IMaintenanceReportItemBase {\n makerName?: string | undefined;\n machineId?: string | undefined;\n modelName?: string | undefined;\n returnPlace?: string | undefined;\n maintainedAt?: string | undefined;\n firstWorkerName?: string | undefined;\n completeWorkerName?: string | undefined;\n inspector?: string | undefined;\n firstTeamLeader?: string | undefined;\n completeTeamLeader?: string | undefined;\n firstManager?: string | undefined;\n completeManager?: string | undefined;\n\n constructor(data?: IMaintenanceReportItemBase) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.makerName = _data[\"makerName\"];\n this.machineId = _data[\"machineId\"];\n this.modelName = _data[\"modelName\"];\n this.returnPlace = _data[\"returnPlace\"];\n this.maintainedAt = _data[\"maintainedAt\"];\n this.firstWorkerName = _data[\"firstWorkerName\"];\n this.completeWorkerName = _data[\"completeWorkerName\"];\n this.inspector = _data[\"inspector\"];\n this.firstTeamLeader = _data[\"firstTeamLeader\"];\n this.completeTeamLeader = _data[\"completeTeamLeader\"];\n this.firstManager = _data[\"firstManager\"];\n this.completeManager = _data[\"completeManager\"];\n }\n }\n\n static fromJS(data: any): MaintenanceReportItemBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'MaintenanceReportItemBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"makerName\"] = this.makerName;\n data[\"machineId\"] = this.machineId;\n data[\"modelName\"] = this.modelName;\n data[\"returnPlace\"] = this.returnPlace;\n data[\"maintainedAt\"] = this.maintainedAt;\n data[\"firstWorkerName\"] = this.firstWorkerName;\n data[\"completeWorkerName\"] = this.completeWorkerName;\n data[\"inspector\"] = this.inspector;\n data[\"firstTeamLeader\"] = this.firstTeamLeader;\n data[\"completeTeamLeader\"] = this.completeTeamLeader;\n data[\"firstManager\"] = this.firstManager;\n data[\"completeManager\"] = this.completeManager;\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceReportItemBase {\n throw new Error(\"The abstract class 'MaintenanceReportItemBase' cannot be instantiated.\");\n }\n}\n\nexport interface IMaintenanceReportItemBase extends IReportItemBase {\n makerName?: string | undefined;\n machineId?: string | undefined;\n modelName?: string | undefined;\n returnPlace?: string | undefined;\n maintainedAt?: string | undefined;\n firstWorkerName?: string | undefined;\n completeWorkerName?: string | undefined;\n inspector?: string | undefined;\n firstTeamLeader?: string | undefined;\n completeTeamLeader?: string | undefined;\n firstManager?: string | undefined;\n completeManager?: string | undefined;\n}\n\nexport class MaintenanceBaseMachineReportItem extends MaintenanceReportItemBase implements IMaintenanceBaseMachineReportItem {\n performanceValue?: string | undefined;\n bodyNo?: string | undefined;\n hrMeter?: string | undefined;\n divisions?: MaintenanceBaseMachineDivisionReportItem[] | undefined;\n\n constructor(data?: IMaintenanceBaseMachineReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.performanceValue = _data[\"performanceValue\"];\n this.bodyNo = _data[\"bodyNo\"];\n this.hrMeter = _data[\"hrMeter\"];\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(MaintenanceBaseMachineDivisionReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceBaseMachineReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceBaseMachineReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"performanceValue\"] = this.performanceValue;\n data[\"bodyNo\"] = this.bodyNo;\n data[\"hrMeter\"] = this.hrMeter;\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceBaseMachineReportItem {\n const json = this.toJSON();\n let result = new MaintenanceBaseMachineReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceBaseMachineReportItem extends IMaintenanceReportItemBase {\n performanceValue?: string | undefined;\n bodyNo?: string | undefined;\n hrMeter?: string | undefined;\n divisions?: MaintenanceBaseMachineDivisionReportItem[] | undefined;\n}\n\nexport abstract class MaintenanceDivisionReportItemBase extends DivisionReportItemBase implements IMaintenanceDivisionReportItemBase {\n firstResult?: string | undefined;\n completeResult?: string | undefined;\n\n constructor(data?: IMaintenanceDivisionReportItemBase) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.firstResult = _data[\"firstResult\"];\n this.completeResult = _data[\"completeResult\"];\n }\n }\n\n static fromJS(data: any): MaintenanceDivisionReportItemBase {\n data = typeof data === 'object' ? data : {};\n throw new Error(\"The abstract class 'MaintenanceDivisionReportItemBase' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"firstResult\"] = this.firstResult;\n data[\"completeResult\"] = this.completeResult;\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceDivisionReportItemBase {\n throw new Error(\"The abstract class 'MaintenanceDivisionReportItemBase' cannot be instantiated.\");\n }\n}\n\nexport interface IMaintenanceDivisionReportItemBase extends IDivisionReportItemBase {\n firstResult?: string | undefined;\n completeResult?: string | undefined;\n}\n\nexport class MaintenanceBaseMachineDivisionReportItem extends MaintenanceDivisionReportItemBase implements IMaintenanceBaseMachineDivisionReportItem {\n\n constructor(data?: IMaintenanceBaseMachineDivisionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): MaintenanceBaseMachineDivisionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceBaseMachineDivisionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceBaseMachineDivisionReportItem {\n const json = this.toJSON();\n let result = new MaintenanceBaseMachineDivisionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceBaseMachineDivisionReportItem extends IMaintenanceDivisionReportItemBase {\n}\n\nexport class MaintenanceAugerReportItem extends MaintenanceReportItemBase implements IMaintenanceAugerReportItem {\n voltage?: string | undefined;\n swivel?: string | undefined;\n pitch?: string | undefined;\n operationBoardNo?: string | undefined;\n divisions?: MaintenanceAugerDivisionReportItem[] | undefined;\n\n constructor(data?: IMaintenanceAugerReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.voltage = _data[\"voltage\"];\n this.swivel = _data[\"swivel\"];\n this.pitch = _data[\"pitch\"];\n this.operationBoardNo = _data[\"operationBoardNo\"];\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(MaintenanceAugerDivisionReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceAugerReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceAugerReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"voltage\"] = this.voltage;\n data[\"swivel\"] = this.swivel;\n data[\"pitch\"] = this.pitch;\n data[\"operationBoardNo\"] = this.operationBoardNo;\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceAugerReportItem {\n const json = this.toJSON();\n let result = new MaintenanceAugerReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceAugerReportItem extends IMaintenanceReportItemBase {\n voltage?: string | undefined;\n swivel?: string | undefined;\n pitch?: string | undefined;\n operationBoardNo?: string | undefined;\n divisions?: MaintenanceAugerDivisionReportItem[] | undefined;\n}\n\nexport class MaintenanceAugerDivisionReportItem extends MaintenanceDivisionReportItemBase implements IMaintenanceAugerDivisionReportItem {\n\n constructor(data?: IMaintenanceAugerDivisionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): MaintenanceAugerDivisionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceAugerDivisionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceAugerDivisionReportItem {\n const json = this.toJSON();\n let result = new MaintenanceAugerDivisionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceAugerDivisionReportItem extends IMaintenanceDivisionReportItemBase {\n}\n\nexport class MaintenanceLiftReportItem extends MaintenanceReportItemBase implements IMaintenanceLiftReportItem {\n equipmentBody?: string | undefined;\n weatherAndTemperature?: string | undefined;\n divisions?: MaintenanceLiftDivisionReportItem[] | undefined;\n\n constructor(data?: IMaintenanceLiftReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.equipmentBody = _data[\"equipmentBody\"];\n this.weatherAndTemperature = _data[\"weatherAndTemperature\"];\n if (Array.isArray(_data[\"divisions\"])) {\n this.divisions = [] as any;\n for (let item of _data[\"divisions\"])\n this.divisions!.push(MaintenanceLiftDivisionReportItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): MaintenanceLiftReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceLiftReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"equipmentBody\"] = this.equipmentBody;\n data[\"weatherAndTemperature\"] = this.weatherAndTemperature;\n if (Array.isArray(this.divisions)) {\n data[\"divisions\"] = [];\n for (let item of this.divisions)\n data[\"divisions\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceLiftReportItem {\n const json = this.toJSON();\n let result = new MaintenanceLiftReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceLiftReportItem extends IMaintenanceReportItemBase {\n equipmentBody?: string | undefined;\n weatherAndTemperature?: string | undefined;\n divisions?: MaintenanceLiftDivisionReportItem[] | undefined;\n}\n\nexport class MaintenanceLiftDivisionReportItem extends MaintenanceDivisionReportItemBase implements IMaintenanceLiftDivisionReportItem {\n\n constructor(data?: IMaintenanceLiftDivisionReportItem) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): MaintenanceLiftDivisionReportItem {\n data = typeof data === 'object' ? data : {};\n let result = new MaintenanceLiftDivisionReportItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): MaintenanceLiftDivisionReportItem {\n const json = this.toJSON();\n let result = new MaintenanceLiftDivisionReportItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMaintenanceLiftDivisionReportItem extends IMaintenanceDivisionReportItemBase {\n}\n\nexport class GetReportInput extends InputBase implements IGetReportInput {\n machineIds?: KeyValueItemOfIntegerAndString[] | undefined;\n reportType!: number;\n beginAt!: string;\n endAt!: string;\n\n constructor(data?: IGetReportInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"machineIds\"])) {\n this.machineIds = [] as any;\n for (let item of _data[\"machineIds\"])\n this.machineIds!.push(KeyValueItemOfIntegerAndString.fromJS(item));\n }\n this.reportType = _data[\"reportType\"];\n this.beginAt = _data[\"beginAt\"];\n this.endAt = _data[\"endAt\"];\n }\n }\n\n static fromJS(data: any): GetReportInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetReportInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n if (Array.isArray(this.machineIds)) {\n data[\"machineIds\"] = [];\n for (let item of this.machineIds)\n data[\"machineIds\"].push(item.toJSON());\n }\n data[\"reportType\"] = this.reportType;\n data[\"beginAt\"] = this.beginAt;\n data[\"endAt\"] = this.endAt;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetReportInput {\n const json = this.toJSON();\n let result = new GetReportInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetReportInput extends IInputBase {\n machineIds?: KeyValueItemOfIntegerAndString[] | undefined;\n reportType: number;\n beginAt: string;\n endAt: string;\n}\n\nexport class UploadFileOutput extends ErrorOutput2 implements IUploadFileOutput {\n path?: string | undefined;\n\n constructor(data?: IUploadFileOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.path = _data[\"path\"];\n }\n }\n\n static fromJS(data: any): UploadFileOutput {\n data = typeof data === 'object' ? data : {};\n let result = new UploadFileOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"path\"] = this.path;\n super.toJSON(data);\n return data; \n }\n\n clone(): UploadFileOutput {\n const json = this.toJSON();\n let result = new UploadFileOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IUploadFileOutput extends IErrorOutput2 {\n path?: string | undefined;\n}\n\nexport class GetRequestOutput extends ErrorOutput2 implements IGetRequestOutput {\n baseMachineId?: string | undefined;\n items?: RequestItem[] | undefined;\n\n constructor(data?: IGetRequestOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseMachineId = _data[\"baseMachineId\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(RequestItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetRequestOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetRequestOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseMachineId\"] = this.baseMachineId;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetRequestOutput {\n const json = this.toJSON();\n let result = new GetRequestOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetRequestOutput extends IErrorOutput2 {\n baseMachineId?: string | undefined;\n items?: RequestItem[] | undefined;\n}\n\nexport class RequestItem implements IRequestItem {\n requestId!: number;\n subRequestIds?: number[] | undefined;\n parameters?: string[] | undefined;\n\n constructor(data?: IRequestItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.requestId = _data[\"requestId\"];\n if (Array.isArray(_data[\"subRequestIds\"])) {\n this.subRequestIds = [] as any;\n for (let item of _data[\"subRequestIds\"])\n this.subRequestIds!.push(item);\n }\n if (Array.isArray(_data[\"parameters\"])) {\n this.parameters = [] as any;\n for (let item of _data[\"parameters\"])\n this.parameters!.push(item);\n }\n }\n }\n\n static fromJS(data: any): RequestItem {\n data = typeof data === 'object' ? data : {};\n let result = new RequestItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"requestId\"] = this.requestId;\n if (Array.isArray(this.subRequestIds)) {\n data[\"subRequestIds\"] = [];\n for (let item of this.subRequestIds)\n data[\"subRequestIds\"].push(item);\n }\n if (Array.isArray(this.parameters)) {\n data[\"parameters\"] = [];\n for (let item of this.parameters)\n data[\"parameters\"].push(item);\n }\n return data; \n }\n\n clone(): RequestItem {\n const json = this.toJSON();\n let result = new RequestItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IRequestItem {\n requestId: number;\n subRequestIds?: number[] | undefined;\n parameters?: string[] | undefined;\n}\n\nexport class GetRequestInput extends InputBase implements IGetRequestInput {\n baseMachineId?: string | undefined;\n\n constructor(data?: IGetRequestInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseMachineId = _data[\"baseMachineId\"];\n }\n }\n\n static fromJS(data: any): GetRequestInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetRequestInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseMachineId\"] = this.baseMachineId;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetRequestInput {\n const json = this.toJSON();\n let result = new GetRequestInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetRequestInput extends IInputBase {\n baseMachineId?: string | undefined;\n}\n\nexport class GetDailyInspectionPreviewReportOutput extends ErrorOutput2 implements IGetDailyInspectionPreviewReportOutput {\n report?: DailyInspectionReportItem | undefined;\n\n constructor(data?: IGetDailyInspectionPreviewReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.report = _data[\"report\"] ? DailyInspectionReportItem.fromJS(_data[\"report\"]) : undefined;\n }\n }\n\n static fromJS(data: any): GetDailyInspectionPreviewReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetDailyInspectionPreviewReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"report\"] = this.report ? this.report.toJSON() : undefined;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetDailyInspectionPreviewReportOutput {\n const json = this.toJSON();\n let result = new GetDailyInspectionPreviewReportOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetDailyInspectionPreviewReportOutput extends IErrorOutput2 {\n report?: DailyInspectionReportItem | undefined;\n}\n\nexport class GetWeeklyInspectionPreviewReportOutput extends ErrorOutput2 implements IGetWeeklyInspectionPreviewReportOutput {\n report?: WeeklyInspectionReportItem | undefined;\n\n constructor(data?: IGetWeeklyInspectionPreviewReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.report = _data[\"report\"] ? WeeklyInspectionReportItem.fromJS(_data[\"report\"]) : undefined;\n }\n }\n\n static fromJS(data: any): GetWeeklyInspectionPreviewReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetWeeklyInspectionPreviewReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"report\"] = this.report ? this.report.toJSON() : undefined;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetWeeklyInspectionPreviewReportOutput {\n const json = this.toJSON();\n let result = new GetWeeklyInspectionPreviewReportOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetWeeklyInspectionPreviewReportOutput extends IErrorOutput2 {\n report?: WeeklyInspectionReportItem | undefined;\n}\n\nexport class GetCompletionInspectionPreviewReportOutput extends ErrorOutput2 implements IGetCompletionInspectionPreviewReportOutput {\n report?: CompletionInspectionReportItem | undefined;\n\n constructor(data?: IGetCompletionInspectionPreviewReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.report = _data[\"report\"] ? CompletionInspectionReportItem.fromJS(_data[\"report\"]) : undefined;\n }\n }\n\n static fromJS(data: any): GetCompletionInspectionPreviewReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCompletionInspectionPreviewReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"report\"] = this.report ? this.report.toJSON() : undefined;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCompletionInspectionPreviewReportOutput {\n const json = this.toJSON();\n let result = new GetCompletionInspectionPreviewReportOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetCompletionInspectionPreviewReportOutput extends IErrorOutput2 {\n report?: CompletionInspectionReportItem | undefined;\n}\n\nexport class GetMaintenancePreviewReportOutput extends ErrorOutput2 implements IGetMaintenancePreviewReportOutput {\n baseMachineReport?: MaintenanceBaseMachineReportItem | undefined;\n augerReport?: MaintenanceAugerReportItem | undefined;\n liftReport?: MaintenanceLiftReportItem | undefined;\n isStamped!: boolean;\n\n constructor(data?: IGetMaintenancePreviewReportOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseMachineReport = _data[\"baseMachineReport\"] ? MaintenanceBaseMachineReportItem.fromJS(_data[\"baseMachineReport\"]) : undefined;\n this.augerReport = _data[\"augerReport\"] ? MaintenanceAugerReportItem.fromJS(_data[\"augerReport\"]) : undefined;\n this.liftReport = _data[\"liftReport\"] ? MaintenanceLiftReportItem.fromJS(_data[\"liftReport\"]) : undefined;\n this.isStamped = _data[\"isStamped\"];\n }\n }\n\n static fromJS(data: any): GetMaintenancePreviewReportOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetMaintenancePreviewReportOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseMachineReport\"] = this.baseMachineReport ? this.baseMachineReport.toJSON() : undefined;\n data[\"augerReport\"] = this.augerReport ? this.augerReport.toJSON() : undefined;\n data[\"liftReport\"] = this.liftReport ? this.liftReport.toJSON() : undefined;\n data[\"isStamped\"] = this.isStamped;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetMaintenancePreviewReportOutput {\n const json = this.toJSON();\n let result = new GetMaintenancePreviewReportOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetMaintenancePreviewReportOutput extends IErrorOutput2 {\n baseMachineReport?: MaintenanceBaseMachineReportItem | undefined;\n augerReport?: MaintenanceAugerReportItem | undefined;\n liftReport?: MaintenanceLiftReportItem | undefined;\n isStamped: boolean;\n}\n\nexport class SaveMachineResetHistoryOutput extends ErrorOutput2 implements ISaveMachineResetHistoryOutput {\n\n constructor(data?: ISaveMachineResetHistoryOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): SaveMachineResetHistoryOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMachineResetHistoryOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMachineResetHistoryOutput {\n const json = this.toJSON();\n let result = new SaveMachineResetHistoryOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMachineResetHistoryOutput extends IErrorOutput2 {\n}\n\nexport class SaveMachineResetHistoryInput extends InputBase implements ISaveMachineResetHistoryInput {\n baseMachineId?: string | undefined;\n items?: MachineResetHistoryItem[] | undefined;\n\n constructor(data?: ISaveMachineResetHistoryInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.baseMachineId = _data[\"baseMachineId\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(MachineResetHistoryItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveMachineResetHistoryInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveMachineResetHistoryInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"baseMachineId\"] = this.baseMachineId;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveMachineResetHistoryInput {\n const json = this.toJSON();\n let result = new SaveMachineResetHistoryInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveMachineResetHistoryInput extends IInputBase {\n baseMachineId?: string | undefined;\n items?: MachineResetHistoryItem[] | undefined;\n}\n\nexport class MachineResetHistoryItem implements IMachineResetHistoryItem {\n resetAt!: string;\n type!: number;\n value?: string | undefined;\n\n constructor(data?: IMachineResetHistoryItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.resetAt = _data[\"resetAt\"];\n this.type = _data[\"type\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): MachineResetHistoryItem {\n data = typeof data === 'object' ? data : {};\n let result = new MachineResetHistoryItem();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"resetAt\"] = this.resetAt;\n data[\"type\"] = this.type;\n data[\"value\"] = this.value;\n return data; \n }\n\n clone(): MachineResetHistoryItem {\n const json = this.toJSON();\n let result = new MachineResetHistoryItem();\n result.init(json);\n return result;\n }\n}\n\nexport interface IMachineResetHistoryItem {\n resetAt: string;\n type: number;\n value?: string | undefined;\n}\n\nexport class GetCtuMaintenanceOutput extends ErrorOutput2 implements IGetCtuMaintenanceOutput {\n savedAt?: string | undefined;\n items?: CtuMaintenanceItem[] | undefined;\n\n constructor(data?: IGetCtuMaintenanceOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.savedAt = _data[\"savedAt\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(CtuMaintenanceItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): GetCtuMaintenanceOutput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCtuMaintenanceOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"savedAt\"] = this.savedAt;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCtuMaintenanceOutput {\n const json = this.toJSON();\n let result = new GetCtuMaintenanceOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetCtuMaintenanceOutput extends IErrorOutput2 {\n savedAt?: string | undefined;\n items?: CtuMaintenanceItem[] | undefined;\n}\n\nexport class GetCtuMaintenanceInput extends InputBase implements IGetCtuMaintenanceInput {\n machineId?: string | undefined;\n machineType!: MachineType;\n\n constructor(data?: IGetCtuMaintenanceInput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n }\n }\n\n static fromJS(data: any): GetCtuMaintenanceInput {\n data = typeof data === 'object' ? data : {};\n let result = new GetCtuMaintenanceInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n super.toJSON(data);\n return data; \n }\n\n clone(): GetCtuMaintenanceInput {\n const json = this.toJSON();\n let result = new GetCtuMaintenanceInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface IGetCtuMaintenanceInput extends IInputBase {\n machineId?: string | undefined;\n machineType: MachineType;\n}\n\nexport class SaveCtuMaintenanceOutput extends ErrorOutput2 implements ISaveCtuMaintenanceOutput {\n\n constructor(data?: ISaveCtuMaintenanceOutput) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): SaveCtuMaintenanceOutput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveCtuMaintenanceOutput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n super.toJSON(data);\n return data; \n }\n\n clone(): SaveCtuMaintenanceOutput {\n const json = this.toJSON();\n let result = new SaveCtuMaintenanceOutput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveCtuMaintenanceOutput extends IErrorOutput2 {\n}\n\nexport class SaveCtuMaintenanceInput implements ISaveCtuMaintenanceInput {\n machineId?: string | undefined;\n machineType!: MachineType;\n savedAt!: string;\n items?: CtuMaintenanceItem[] | undefined;\n\n constructor(data?: ISaveCtuMaintenanceInput) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.machineId = _data[\"machineId\"];\n this.machineType = _data[\"machineType\"];\n this.savedAt = _data[\"savedAt\"];\n if (Array.isArray(_data[\"items\"])) {\n this.items = [] as any;\n for (let item of _data[\"items\"])\n this.items!.push(CtuMaintenanceItem.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): SaveCtuMaintenanceInput {\n data = typeof data === 'object' ? data : {};\n let result = new SaveCtuMaintenanceInput();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"machineId\"] = this.machineId;\n data[\"machineType\"] = this.machineType;\n data[\"savedAt\"] = this.savedAt;\n if (Array.isArray(this.items)) {\n data[\"items\"] = [];\n for (let item of this.items)\n data[\"items\"].push(item.toJSON());\n }\n return data; \n }\n\n clone(): SaveCtuMaintenanceInput {\n const json = this.toJSON();\n let result = new SaveCtuMaintenanceInput();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISaveCtuMaintenanceInput {\n machineId?: string | undefined;\n machineType: MachineType;\n savedAt: string;\n items?: CtuMaintenanceItem[] | undefined;\n}\n\nexport class SignInInput2 extends InputBase implements ISignInInput2 {\n userId?: string | undefined;\n password?: string | undefined;\n\n constructor(data?: ISignInInput2) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.userId = _data[\"userId\"];\n this.password = _data[\"password\"];\n }\n }\n\n static fromJS(data: any): SignInInput2 {\n data = typeof data === 'object' ? data : {};\n let result = new SignInInput2();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === 'object' ? data : {};\n data[\"userId\"] = this.userId;\n data[\"password\"] = this.password;\n super.toJSON(data);\n return data; \n }\n\n clone(): SignInInput2 {\n const json = this.toJSON();\n let result = new SignInInput2();\n result.init(json);\n return result;\n }\n}\n\nexport interface ISignInInput2 extends IInputBase {\n userId?: string | undefined;\n password?: string | undefined;\n}\n\nexport interface FileResponse {\n data: Blob;\n status: number;\n fileName?: string;\n headers?: { [name: string]: any };\n}\n\nexport class SwaggerException extends Error {\n message: string;\n status: number; \n response: string; \n headers: { [key: string]: any; };\n result: any; \n\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\n super();\n\n this.message = message;\n this.status = status;\n this.response = response;\n this.headers = headers;\n this.result = result;\n }\n\n protected isSwaggerException = true;\n\n static isSwaggerException(obj: any): obj is SwaggerException {\n return obj.isSwaggerException === true;\n }\n}\n\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\n throw new SwaggerException(message, status, response, headers, result);\n}","import { WebApiClient } from './swagger-clients';\r\n\r\n/**\r\n* アプリケーションの扱いやすい形式で `Web API` を公開するサーバーと `HTTP` 通信する基本機能を提供します。\r\n*/\r\nexport abstract class WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** `Web API` を公開するサーバーと `HTTP` 通信するオブジェクトを表します。 */\r\n protected readonly client: TClient;\r\n\r\n /** サーバー通信失敗のメッセージを表します。 */\r\n protected static readonly messageFailedCommunication = \"サーバーとの通信に失敗しました\";\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n * @param client `Web API` を公開するサーバーと `HTTP` 通信するオブジェクトを指定します。\r\n */\r\n protected constructor(client: TClient) {\r\n this.client = client;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { AreaType, MachineItem } from \"../../../../_types\";\r\n\r\n/** 施工機モニタテーブル項目のインターフェイスを提供します。 */\r\nexport interface MachineMonitoringListItem {\r\n /** ベースマシン 社番を表します。 */\r\n readonly baseMachine: MachineItem;\r\n /** オーガー 社番を表します。 */\r\n readonly auger: MachineItem;\r\n /** 昇降装置 社番を表します。 */\r\n readonly lift: MachineItem;\r\n /** 作業場所を表します。 */\r\n readonly site: string;\r\n /** 施工機がロックされているかどうかを表します。 */\r\n readonly isLock: boolean;\r\n /** エリア種別を表します。 */\r\n readonly areaType?: AreaType;\r\n /** タブレット ID を表します。 */\r\n readonly tabletId: string;\r\n /** エラー情報 を表します。 */\r\n readonly ctuError: string;\r\n /** 報告事項 を表します。 */\r\n readonly reportItem: string;\r\n /** タブレットがアクセスしているかどうかを表します。 */\r\n readonly isConnectedTablet: boolean;\r\n /** 特定自主検査後日数を取得または設定します。 */\r\n readonly selfInspection: string;\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum MachineMonitoringSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** ベースマシンを表します。 */\r\n BaseMachine = 1,\r\n /** オーガーを表します。 */\r\n Auger = 2,\r\n /** 昇降装置を表します。 */\r\n Lift = 3,\r\n}\r\n\r\n/** 入力項目のインターフェイスを提供します。 */\r\nexport interface MachineMonitoringInputItem {\r\n /** 施工機キーワードを表します。 */\r\n machineKeyword: string;\r\n /** 検索種別を表します。 */\r\n type: MachineMonitoringSearchType;\r\n /** 作業現場キーワードを表します。 */\r\n siteKeyword: string;\r\n /** 報告事項キーワードを表します。 */\r\n reportKeyword: string;\r\n}\r\n","/** エリアの列挙値を提供します。 */\r\nexport enum AreaType {\r\n /** 指定無し(全国)を表します。 */\r\n None = 0,\r\n /** 東地区を表します。 */\r\n East = 1,\r\n /** 西地区を表します。 */\r\n West = 2,\r\n}\r\n\r\n/** 施工機種別を表す列挙値を提供します。 */\r\nexport enum MachineType {\r\n /** ベースマシンを表します。 */\r\n BaseMachine = 0,\r\n /** オーガーを表します。 */\r\n Auger = 1,\r\n /** 昇降装置を表します。 */\r\n Lift = 2,\r\n}\r\n\r\n/** 点検種別を表す列挙値を提供します。 */\r\nexport enum InspectionType {\r\n /** 日常点検を表します。 */\r\n Daily = 0,\r\n /** 週間月例点検を表します。 */\r\n Weekly = 1,\r\n /** 現場完了時点検を表します。 */\r\n Completion = 2,\r\n}\r\n\r\n/** CTUあり/なしを表す列挙値を提供します。 */\r\nexport enum ConnectedCtuType {\r\n /** 指定なし(対象外)を表します。 */\r\n NotApplicable = 0,\r\n /** CTUありを表します。 */\r\n Connected = 1,\r\n /** CTUなしを表します。 */\r\n Disconnected = 2,\r\n}\r\n\r\n/** 施工機情報を表すインターフェイスを提供します。 */\r\nexport interface MachineItem {\r\n /** 社番を表します。*/\r\n id: string,\r\n /** メーカーを表します。 */\r\n manufacturer: string,\r\n /** 型式を表します。 */\r\n model: string,\r\n /** CTUあり/なしを表します。 */\r\n ctu: ConnectedCtuType,\r\n}\r\n\r\n/** 施工機を表すインターフェイスを提供します。 */\r\nexport interface Machine {\r\n /** 施工機種別を表します。 */\r\n type: MachineType,\r\n /** 施工機情報を表します。 */\r\n item: MachineItem\r\n}\r\n\r\n/** キーと値を表すインターフェイスを提供します。 */\r\nexport interface KeyValueItem {\r\n /** キーを表します。 */\r\n key: TKey;\r\n /** 値を表します。 */\r\n value: TValue;\r\n}\r\n\r\n/** 認証済みのユーザー情報を表すインターフェイスを提供します。 */\r\nexport interface UserItem {\r\n /** ユーザー id を表します。 */\r\n id: string,\r\n /** ユーザー名を表します。 */\r\n name: string,\r\n /** 検印者名を表します。 */\r\n inspectorName: string,\r\n}\r\n\r\n/**\r\n * 曜日を表す列挙値を提供します。\r\n */\r\nexport enum DayOfWeek {\r\n /** 日曜日 を表します。 */\r\n Sunday = 0,\r\n /** 月曜日 を表します。 */\r\n Monday = 1,\r\n /** 火曜日 を表します。 */\r\n Tuesday = 2,\r\n /** 水曜日 を表します。 */\r\n Wednesday = 3,\r\n /** 木曜日 を表します。 */\r\n Thursday = 4,\r\n /** 金曜日 を表します。 */\r\n Friday = 5,\r\n /** 土曜日 を表します。 */\r\n Saturday = 6,\r\n}\r\n\r\n/**\r\n * 週を表す列挙値を提供します。\r\n */\r\nexport enum WeekOfMonth {\r\n /** 第一週を表します。 */\r\n First = 1,\r\n /** 第二週を表します。 */\r\n Second = 2,\r\n /** 第三週を表します。 */\r\n Third = 3,\r\n /** 第四週を表します。 */\r\n Fourth = 4,\r\n /** 第五週を表します。 */\r\n Fifth = 5,\r\n}\r\n","import { AreaType as DtoAreaType, MachineType as DtoMachineType, ConnectedCtuType as DtoConnectedCtuType, DayOfWeek as DtoDayOfWeek, WeekOfMonth as DtoWeekOfMonth } from '../swagger-clients';\r\nimport { AreaType, MachineType, ConnectedCtuType, DayOfWeek, WeekOfMonth, KeyValueItem } from '../../_types';\r\n\r\n/**\r\n * 共通のユーティリティ機能を提供します。\r\n */\r\nexport class SharedUtility {\r\n\r\n //#region フィールド\r\n\r\n /** 曜日文字配列列を表します。 */\r\n static readonly DayOfWeekStrings: KeyValueItem[] = [\r\n { key: DayOfWeek.Sunday, value: \"日\" },\r\n { key: DayOfWeek.Monday, value: \"月\" },\r\n { key: DayOfWeek.Tuesday, value: \"火\" },\r\n { key: DayOfWeek.Wednesday, value: \"水\" },\r\n { key: DayOfWeek.Thursday, value: \"木\" },\r\n { key: DayOfWeek.Friday, value: \"金\" },\r\n { key: DayOfWeek.Saturday, value: \"土\" }\r\n ];\r\n\r\n /** 週間文字配列を表します。 */\r\n static readonly WeekOfMonthStrings: KeyValueItem[] = [\r\n { key: WeekOfMonth.First, value: \"第1週\" },\r\n { key: WeekOfMonth.Second, value: \"第2週\" },\r\n { key: WeekOfMonth.Third, value: \"第3週\" },\r\n { key: WeekOfMonth.Fourth, value: \"第4週\" },\r\n { key: WeekOfMonth.Fifth, value: \"第5週\" },\r\n ];\r\n\r\n //#endregion フィールド\r\n\r\n\r\n /**\r\n * 日付文字列を返します。\r\n *\r\n * @param source 日時を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toDateString(source: Date): string {\r\n const result = `${source.getFullYear()}/${(source.getMonth() + 1).toString().padStart(2, '0')}/${source.getDate().toString().padStart(2, '0')}`;\r\n return result;\r\n }\r\n\r\n /**\r\n * 時間文字列を返します。\r\n *\r\n * @param source 日時を指定します。\r\n * @param isSeconds 時間に秒を含めるかどうかを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toTimeString(source: Date, isSeconds: boolean = true): string {\r\n let result = `${source.getHours().toString().padStart(2, '0')}:${source.getMinutes().toString().padStart(2, '0')}`;\r\n if (isSeconds === true) {\r\n result += `:${source.getSeconds().toString().padStart(2, '0')}`;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 日時文字列を返します。\r\n *\r\n * @param source 日時を指定します。\r\n * @param isSeconds 時間に秒を含めるかどうかを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toDateTimeString(source: Date, isSeconds: boolean = true): string {\r\n const result = `${SharedUtility.toDateString(source)} ${SharedUtility.toTimeString(source, isSeconds)}`;\r\n return result;\r\n }\r\n\r\n /**\r\n * 年月文字列を返します。\r\n *\r\n * @param source 日時を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toYearMonthString(source: Date): string {\r\n const result = `${source.getFullYear()}/${(source.getMonth() + 1).toString().padStart(2, '0')}`;\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * エリア種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toAreaType(source: DtoAreaType): AreaType {\r\n const result: AreaType | undefined =\r\n source === DtoAreaType.East ? AreaType.East :\r\n source === DtoAreaType.West ? AreaType.West :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toAreaType\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * エリア種別を文字列に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toAreaText(source: DtoAreaType): string {\r\n const result: string | undefined =\r\n source === DtoAreaType.East ? \"東地区\" :\r\n source === DtoAreaType.West ? \"西地区\" :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toAreaText\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 機器種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMachineType(source: DtoMachineType): MachineType {\r\n const result = source === DtoMachineType.BaseMachine ? MachineType.BaseMachine :\r\n source === DtoMachineType.Auger ? MachineType.Auger :\r\n source === DtoMachineType.Lift ? MachineType.Lift :\r\n void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"toMachineType\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 機器種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static fromMachineType(source: MachineType): DtoMachineType {\r\n const result = source === MachineType.BaseMachine ? DtoMachineType.BaseMachine :\r\n source === MachineType.Auger ? DtoMachineType.Auger :\r\n source === MachineType.Lift ? DtoMachineType.Lift :\r\n void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"fromMachineType\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * CTUあり/なしを変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toConectedCtu(source: DtoConnectedCtuType): ConnectedCtuType {\r\n const result = source === DtoConnectedCtuType.NotApplicable ? ConnectedCtuType.NotApplicable\r\n : source === DtoConnectedCtuType.Connected ? ConnectedCtuType.Connected\r\n : source === DtoConnectedCtuType.Disconnected ? ConnectedCtuType.Disconnected\r\n : void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"toConectedCtu\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * CTUあり/なしを変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static fromConectedCtu(source: ConnectedCtuType): DtoConnectedCtuType {\r\n const result = source === ConnectedCtuType.NotApplicable ? DtoConnectedCtuType.NotApplicable\r\n : source === ConnectedCtuType.Connected ? DtoConnectedCtuType.Connected\r\n : source === ConnectedCtuType.Disconnected ? DtoConnectedCtuType.Disconnected\r\n : void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"fromConectedCtu\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * CTUあり/なしを文字列に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toConectedCtuText(source: DtoConnectedCtuType): string {\r\n const result = source === DtoConnectedCtuType.NotApplicable ? \"---\"\r\n : source === DtoConnectedCtuType.Connected ? \"あり\"\r\n : source === DtoConnectedCtuType.Disconnected ? \"なし\"\r\n : void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"toConectedCtuText\");\r\n }\r\n return result;\r\n }\r\n\r\n // TODO kura UE.Core.Typescript -> UE.DateTimeFormat を使うのが理想\r\n /**\r\n * 日付文字列に変換します\r\n * @param data 日付を指定します。\r\n * @returns 文字列を変換します。引数が Nullable の場合は Undefined を返します。\r\n */\r\n public static toFormatDateString(date: Date): string {\r\n\r\n const yearStr = date.getFullYear().toString();\r\n const monthStr = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const dayStr = date.getDate().toString().padStart(2, '0');\r\n const hourStr = date.getHours().toString().padStart(2, '0');\r\n const minuteStr = date.getMinutes().toString().padStart(2, '0');\r\n const secondStr = date.getSeconds().toString().padStart(2, '0');\r\n const milliSecondStr = date.getMilliseconds().toString().padStart(3, '0');\r\n\r\n let result = 'YYYY-MM-ddThh:mm:ss:SSS';\r\n result = result.replace(/YYYY/g, yearStr);\r\n result = result.replace(/MM/g, monthStr);\r\n result = result.replace(/dd/g, dayStr);\r\n result = result.replace(/hh/g, hourStr);\r\n result = result.replace(/mm/g, minuteStr);\r\n result = result.replace(/ss/g, secondStr);\r\n result = result.replace(/SSS/g, milliSecondStr);\r\n\r\n return result;\r\n };\r\n\r\n /**\r\n * 曜日を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toDayOfWeek(source: DtoDayOfWeek): DayOfWeek {\r\n const result: DayOfWeek | undefined =\r\n source === DtoDayOfWeek.Sunday ? DayOfWeek.Sunday :\r\n source === DtoDayOfWeek.Monday ? DayOfWeek.Monday :\r\n source === DtoDayOfWeek.Tuesday ? DayOfWeek.Tuesday :\r\n source === DtoDayOfWeek.Wednesday ? DayOfWeek.Wednesday :\r\n source === DtoDayOfWeek.Thursday ? DayOfWeek.Thursday :\r\n source === DtoDayOfWeek.Friday ? DayOfWeek.Friday :\r\n source === DtoDayOfWeek.Saturday ? DayOfWeek.Saturday :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toDayOfWeek\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 曜日を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static fromDayOfWeek(source: DayOfWeek): DtoDayOfWeek {\r\n const result: DtoDayOfWeek | undefined =\r\n source === DayOfWeek.Sunday ? DtoDayOfWeek.Sunday :\r\n source === DayOfWeek.Monday ? DtoDayOfWeek.Monday :\r\n source === DayOfWeek.Tuesday ? DtoDayOfWeek.Tuesday :\r\n source === DayOfWeek.Wednesday ? DtoDayOfWeek.Wednesday :\r\n source === DayOfWeek.Thursday ? DtoDayOfWeek.Thursday :\r\n source === DayOfWeek.Friday ? DtoDayOfWeek.Friday :\r\n source === DayOfWeek.Saturday ? DtoDayOfWeek.Saturday :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"fromDayOfWeek\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 曜日を文字列に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toDayOfWeekText(source: DayOfWeek): string {\r\n const result: string | undefined = SharedUtility.DayOfWeekStrings.find(item => item.key === source)?.value;\r\n\r\n if (result == null) {\r\n throw new Error(\"toDayOfWeekText\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 月内週間を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toWeekOfMonth(source: DtoWeekOfMonth): WeekOfMonth {\r\n const result: WeekOfMonth | undefined =\r\n source === DtoWeekOfMonth.First ? WeekOfMonth.First :\r\n source === DtoWeekOfMonth.Second ? WeekOfMonth.Second :\r\n source === DtoWeekOfMonth.Third ? WeekOfMonth.Third :\r\n source === DtoWeekOfMonth.Fourth ? WeekOfMonth.Fourth :\r\n source === DtoWeekOfMonth.Fifth ? WeekOfMonth.Fifth :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toWeekOfMonth\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 月内週間を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static fromWeekOfMonth(source: WeekOfMonth): DtoWeekOfMonth {\r\n const result: DtoWeekOfMonth | undefined =\r\n source === WeekOfMonth.First ? DtoWeekOfMonth.First :\r\n source === WeekOfMonth.Second ? DtoWeekOfMonth.Second :\r\n source === WeekOfMonth.Third ? DtoWeekOfMonth.Third :\r\n source === WeekOfMonth.Fourth ? DtoWeekOfMonth.Fourth :\r\n source === WeekOfMonth.Fifth ? DtoWeekOfMonth.Fifth :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"fromWeekOfMonth\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 月内週間を文字列に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toWeekOfMonthText(source: WeekOfMonth): string {\r\n const result: string | undefined = SharedUtility.WeekOfMonthStrings.find(item => item.key === source)?.value;\r\n\r\n if (result == null) {\r\n throw new Error(\"toWeekOfMonthText\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import { MachineMonitoringListItem, MachineMonitoringSearchType } from '../../../pages/ConstructionMachineMonitor/MainMonitor/_types';\r\nimport {\r\n MachineMonitoringItem,\r\n GetMachineMonitoringInput,\r\n KeyValueItemOfMachineTypeAndMachineItem,\r\n MachineMonitoringSearchType as DtoSearchType,\r\n MachineType as DtoMachineType,\r\n ConnectedCtuType as DtoConnectedCtuType,\r\n} from '../../swagger-clients';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\nimport { MachineItem, ConnectedCtuType } from '../../../_types'\r\n\r\n/**\r\n * `MachineMonitoring` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MachineMonitoringUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: MachineMonitoringItem[]): MachineMonitoringListItem[] {\r\n const result: MachineMonitoringListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const baseMachineItem = MachineMonitoringUtility.toMachineData(source.machines, DtoMachineType.BaseMachine);\r\n const augerItem = MachineMonitoringUtility.toMachineData(source.machines, DtoMachineType.Auger);\r\n const liftItem = MachineMonitoringUtility.toMachineData(source.machines, DtoMachineType.Lift);\r\n const item: MachineMonitoringListItem = {\r\n baseMachine: baseMachineItem,\r\n auger: augerItem,\r\n lift: liftItem,\r\n isLock: source.isLock,\r\n site: source.site ?? \"\",\r\n tabletId: source.tabletId ?? \"\",\r\n areaType: source.areaId == null ? void 0 : SharedUtility.toAreaType(source.areaId),\r\n ctuError: source.ctuError ?? \"\",\r\n reportItem: source.reportItem ?? \"\",\r\n isConnectedTablet: source.isConectedTablet,\r\n selfInspection: source.selfInspection ?? \"\",\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 機器情報一覧から指定種別の情報を取得します。\r\n *\r\n * @param source 機器情報一覧を指定します。\r\n * @param type 種別を指定します。\r\n * @returns 見つかった情報を返します。\r\n */\r\n private static toMachineData(source: KeyValueItemOfMachineTypeAndMachineItem[] | undefined, type: DtoMachineType): MachineItem {\r\n if (source == null) {\r\n return {\r\n id: \"\",\r\n manufacturer: \"\",\r\n model: \"\",\r\n ctu: ConnectedCtuType.NotApplicable,\r\n };\r\n }\r\n\r\n const machineItem = source.find(item => item.key == type);\r\n const result = {\r\n id: machineItem?.value?.machineId ?? \"\",\r\n manufacturer: machineItem?.value?.manufacturer ?? \"\",\r\n model: machineItem?.value?.model ?? \"\",\r\n ctu: machineItem?.value?.connectedCtu == null ? ConnectedCtuType.NotApplicable : SharedUtility.toConectedCtu(machineItem.value.connectedCtu),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 検索キーワード種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSearchType(source: MachineMonitoringSearchType): DtoSearchType {\r\n const result: DtoSearchType | undefined =\r\n source === MachineMonitoringSearchType.None ? DtoSearchType.None :\r\n source === MachineMonitoringSearchType.BaseMachine ? DtoSearchType.BaseMachineId :\r\n source === MachineMonitoringSearchType.Auger ? DtoSearchType.AugerMachineId :\r\n source === MachineMonitoringSearchType.Lift ? DtoSearchType.LiftMachineId :\r\n void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"toSearchType\");\r\n }\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MachineMonitoringClient, GetMachineMonitoringInput, UnlockMachineMonitoringInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MachineMonitoringGetRequest, MachineMonitoringResult, MachineMonitoringUnlockRequest } from './types';\r\nimport { MachineMonitoringUtility } from './machine-monitoring-utility';\r\n\r\n/**\r\n * `MachineMonitoring` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MachineMonitoringAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MachineMonitoringAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: MachineMonitoringGetRequest): Promise {\r\n function createErrorResult(message?: string): MachineMonitoringResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetMachineMonitoringInput();\r\n input.init({\r\n searchWord: parameter.item.machineKeyword,\r\n searchType: MachineMonitoringUtility.toSearchType(parameter.item.type),\r\n searchSite: parameter.item.siteKeyword,\r\n searchReportItem: parameter.item.reportKeyword,\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineMonitoringResult = {\r\n isError: false,\r\n items: MachineMonitoringUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ロック解除します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async unlockAsync(parameter: MachineMonitoringUnlockRequest): Promise {\r\n function createErrorResult(message?: string): MachineMonitoringResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new UnlockMachineMonitoringInput();\r\n input.init({\r\n tabletId: parameter.tabletId,\r\n });\r\n const output = await this.client.unlock(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineMonitoringResult = {\r\n isError: false,\r\n items: MachineMonitoringUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MachineMonitoringClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { KeyValueItem } from '../../../_types';\r\nimport { KeyValuePairOfIntegerAndString, KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString } from '../../swagger-clients';\r\n\r\n/**\r\n * `共通` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class SharedUtility {\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toKeyValueItems(items?: KeyValuePairOfIntegerAndString[]): KeyValueItem[] {\r\n const result: KeyValueItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const item: KeyValueItem = {\r\n key: source.key,\r\n value: source.value ?? \"\",\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toKeyValueItemsList(items?: KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString[]): KeyValueItem[]>[] {\r\n const result: KeyValueItem[]>[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n var item: KeyValueItem[]> = {\r\n key: source.key,\r\n value: SharedUtility.toKeyValueItems(source.value),\r\n }\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { SharedClient, KeyValuePairOfIntegerAndString, KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString, ErrorOutput, GetModelOutput, GetManufacturerOutput, GetMachineTypeOutput, GetMaintenanceDivisionOutput, GetInspectionGroupOutput, GetInspectionDivisionOutput, GetMachineErrorInput, GetMachineErrorOutput, CheckPasswordInput, GetCtuOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { KeyValueItemsResult, KeyValueItemsListResult, MachineErrorRequest, MachineErrorResult, CheckPasswordRequest, CheckPasswordResult, AllMachineErrorResult, AuthenticatedUserResult, CtuResult } from './types';\r\nimport { SharedUtility } from './shared-utility';\r\n\r\n/** 要求種別の列挙値を提供します。 */\r\nenum RequestType {\r\n /** 型式を表します。 */\r\n Model,\r\n /** メーカーを表します。 */\r\n Manufacturer,\r\n /** 施工機種別を表します。 */\r\n MachineType,\r\n /** 整備区分を表します。 */\r\n MaintenanceDivision,\r\n /** 点検グループを表します。 */\r\n InspectionGroup,\r\n /** 点検区分を表します。 */\r\n InspectionDivision,\r\n /** CTU 番号 */\r\n CtuId,\r\n}\r\n\r\n/**\r\n * `共通` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class SharedAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new SharedAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorItemsResult(message?: string): KeyValueItemsResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorItemsListResult(message?: string): KeyValueItemsListResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createMachineErrorItemErrorResult(message?: string): MachineErrorResult {\r\n return {\r\n item: \"\",\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createAllMachineErrorItemErrorResult(message?: string): AllMachineErrorResult {\r\n return {\r\n errorMachineIds: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createCheckPasswordItemErrorResult(message?: string): CheckPasswordResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createAuthenticatedUserErrorResult(message?: string): AuthenticatedUserResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createCtuErrorResult(message?: string): CtuResult {\r\n return {\r\n items: [],\r\n maintenanceItems: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n\r\n /**\r\n * 正常を表す結果情報を作成します。\r\n *\r\n * @param items 項目一覧を指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createItemsResult(items?: KeyValuePairOfIntegerAndString[]): KeyValueItemsResult {\r\n const result: KeyValueItemsResult = {\r\n isError: false,\r\n items: SharedUtility.toKeyValueItems(items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 正常を表す結果情報を作成します。\r\n *\r\n * @param items 項目一覧を指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createItemsListResult(items?: KeyValuePairOfIntegerAndIEnumerableOfKeyValuePairOfIntegerAndString[]): KeyValueItemsListResult {\r\n const result: KeyValueItemsListResult = {\r\n isError: false,\r\n items: SharedUtility.toKeyValueItemsList(items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param requestType 要求種別を指定します。\r\n * @param createResultFunc 通信結果情報から戻り値を作成する処理を指定します。\r\n * @param createErrorResultFunc エラー結果情報を作成する処理を指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n private async getCoreAsync(\r\n requestType: RequestType,\r\n createResultFunc: (res: TOutput) => TResult,\r\n createErrorResultFunc: (message?: string) => TResult,\r\n ): Promise {\r\n\r\n let output: ErrorOutput;\r\n\r\n // 実行\r\n // 型式\r\n if (requestType === RequestType.Model) {\r\n output = await this.client.getModel();\r\n }\r\n // メーカー\r\n else if (requestType === RequestType.Manufacturer) {\r\n output = await this.client.getManufacturer();\r\n }\r\n // 施工機種別\r\n else if (requestType == RequestType.MachineType) {\r\n output = await this.client.getMachineType();\r\n }\r\n // CTU番号\r\n else if (requestType == RequestType.CtuId) {\r\n output = await this.client.getCtu();\r\n }\r\n // 整備区分\r\n else if (requestType == RequestType.MaintenanceDivision) {\r\n output = await this.client.getMaintenanceDivision();\r\n }\r\n // 点検グループ\r\n else if (requestType == RequestType.InspectionGroup) {\r\n output = await this.client.getInspectionGroup();\r\n }\r\n // 点検区分\r\n else if (requestType == RequestType.InspectionDivision) {\r\n output = await this.client.getInspectionDivision();\r\n }\r\n // 異常\r\n else {\r\n throw new Error(\"type\");\r\n }\r\n\r\n // 結果チェック\r\n if (output == null) {\r\n return createErrorResultFunc(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResultFunc(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result = createResultFunc(output as TOutput);\r\n return result;\r\n }\r\n\r\n /**\r\n * 型式一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getModelAsync(): Promise {\r\n const result = await this.getCoreAsync(\r\n RequestType.Model,\r\n res => this.createItemsResult(res.items),\r\n this.createErrorItemsResult,\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * メーカー一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getManufacturerAsync(): Promise {\r\n const result = await this.getCoreAsync(\r\n RequestType.Manufacturer,\r\n res => this.createItemsResult(res.items),\r\n this.createErrorItemsResult,\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * 施工機種別一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getMachineTypeAsync(): Promise {\r\n const result = await this.getCoreAsync(\r\n RequestType.MachineType,\r\n res => this.createItemsResult(res.items),\r\n this.createErrorItemsResult,\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * CTU一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getCtuAsync(): Promise {\r\n const output = await this.client.getCtu();\r\n if (output == null) {\r\n return this.createCtuErrorResult(WebApiAdapter.messageFailedCommunication);\r\n } else if (output.isError === true) {\r\n return this.createCtuErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: CtuResult = {\r\n isError: false,\r\n items: SharedUtility.toKeyValueItems(output.items),\r\n maintenanceItems: SharedUtility.toKeyValueItems(output.maintenanceItems),\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 整備区分一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getMaintenanceDivisionAsync(): Promise {\r\n const result = await this.getCoreAsync(\r\n RequestType.MaintenanceDivision,\r\n res => this.createItemsListResult(res.items),\r\n this.createErrorItemsListResult,\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * 点検グループ一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getInspectionGroupAsync(): Promise {\r\n const result = await this.getCoreAsync(\r\n RequestType.InspectionGroup,\r\n res => this.createItemsResult(res.items),\r\n this.createErrorItemsResult,\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * 点検区分一覧を取得します。\r\n *\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getInspectionDivisionAsync(): Promise {\r\n const result = await this.getCoreAsync(\r\n RequestType.InspectionDivision,\r\n res => this.createItemsListResult(res.items),\r\n this.createErrorItemsListResult,\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * エラー情報を取得します。\r\n * @param parameter\r\n */\r\n public async getErrorAsync(parameter: MachineErrorRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetMachineErrorInput();\r\n input.init({ machineId: parameter.machineId });\r\n\r\n const output = await this.client.getMachineError(input);\r\n if (output == null) {\r\n return this.createMachineErrorItemErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createMachineErrorItemErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineErrorResult = {\r\n isError: false,\r\n item: output.ctuError ?? \"\",\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 全エラー施工機情報を取得します。\r\n */\r\n public async getAllMachineErrorAsync(): Promise {\r\n\r\n const output = await this.client.getAllMachineError();\r\n if (output == null) {\r\n return this.createAllMachineErrorItemErrorResult(WebApiAdapter.messageFailedCommunication);\r\n } else if (output.isError === true) {\r\n return this.createAllMachineErrorItemErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: AllMachineErrorResult = {\r\n isError: false,\r\n errorMachineIds: output.machineIds ?? [],\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * パスワード認証を行います。\r\n * @param parameter\r\n */\r\n public async checkPasswordAsync(parameter: CheckPasswordRequest): Promise {\r\n\r\n // 実行\r\n const input = new CheckPasswordInput();\r\n input.init({ password: parameter.item.password });\r\n\r\n const output = await this.client.checkPassword(input);\r\n if (output == null) {\r\n return this.createCheckPasswordItemErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createCheckPasswordItemErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: CheckPasswordResult = {\r\n isError: false,\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 認証済みユーザー情報の取得を行います。\r\n * @param parameter\r\n */\r\n public async getAuthenticatedUserAsync(): Promise {\r\n\r\n // 実行\r\n const output = await this.client.getAuthenticatedUser();\r\n if (output == null) {\r\n return this.createAuthenticatedUserErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createAuthenticatedUserErrorResult(output.errorMessage);\r\n\r\n } else if (output.userId === \"\" || output.userName === \"\") {\r\n return this.createAuthenticatedUserErrorResult(\"ユーザー情報がありません\");\r\n\r\n }\r\n\r\n // 正常\r\n const result: AuthenticatedUserResult = {\r\n isError: false,\r\n user: {\r\n id: output.userId ?? \"\",\r\n name: output.userName ?? \"\",\r\n inspectorName: output.inspector ?? \"\",\r\n },\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new SharedClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n// shared\r\nimport { ExtendGenericState, createExtendGenericSlice } from '../shared/create-extend-generic-slice';\r\nimport { updateCtuMachineError, resetCtuMachineError, setCtuMachineErrorOn, } from '../global-header/global-header-slice';\r\n// type\r\nimport { MachineMonitoringAdapter } from '../../adapter/machine-monitoring/machine-monitoring-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { MachineMonitoringResult, MachineMonitoringUnlockRequest, MachineMonitoringGetRequest } from '../../adapter/machine-monitoring/types';\r\nimport { MachineMonitoringListItem, MachineMonitoringInputItem, MachineMonitoringSearchType } from '../../../pages/ConstructionMachineMonitor/MainMonitor/_types';\r\n\r\n/** 施工機管理状況一覧 アイテム情報 State の インターフェイスを提供します。 */\r\ninterface MahcineMonitoringItemState {\r\n /** 選択された項目を表します。 */\r\n selectedRowItem?: MachineMonitoringListItem,\r\n /** ロック解除のダイアログが表示されているかどうかを表します。 */\r\n isOpenDialog: boolean,\r\n /** タイマーIDを表します。 */\r\n timerId: number;\r\n /** 入力項目を表します。 */\r\n inputItem: MachineMonitoringInputItem,\r\n}\r\n\r\n/** リロードのインターバル時間[ms]を表します。 */\r\nconst ReloadTimerInterval = 60000;\r\n\r\n// State の初期値を設定します。\r\nconst initialState: ExtendGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n item: {\r\n isOpenDialog: false,\r\n timerId: 0,\r\n inputItem: {\r\n type: MachineMonitoringSearchType.None,\r\n machineKeyword: \"\",\r\n siteKeyword: \"\",\r\n reportKeyword: \"\",\r\n }\r\n }\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const MachineMonitoringSlice = createExtendGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'MachineMonitoring',\r\n initialState: initialState,\r\n reducers: {\r\n /**\r\n * ダイアログの開閉処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n toggleDialog(state: ExtendGenericState, action: PayloadAction) {\r\n state.item.isOpenDialog = action.payload;\r\n },\r\n\r\n /**\r\n * 解除アクション(Ctrl + Click)入力時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n selectedRow(state: ExtendGenericState, action: PayloadAction) {\r\n state.item.selectedRowItem = action.payload;\r\n },\r\n\r\n /**\r\n * 更新タイマーを停止します。\r\n * @param state\r\n */\r\n stopReloadTimer(state: ExtendGenericState) {\r\n clearTimeout(state.item.timerId);\r\n state.item.timerId = 0;\r\n },\r\n\r\n /**\r\n * 更新タイマーを開始します。\r\n * @param state\r\n */\r\n startReloadTimer(state: ExtendGenericState, action: PayloadAction) {\r\n clearTimeout(state.item.timerId);\r\n state.item.timerId = action.payload;\r\n },\r\n\r\n /**\r\n * 入力項目を変更します。\r\n * @param state 現在の State 情報を指定します。\r\n * @param action Action を指定します。\r\n */\r\n changeInputItem(state: ExtendGenericState, action: PayloadAction) {\r\n state.item.inputItem = action.payload;\r\n },\r\n\r\n /**\r\n * 入力項目をクリアします。\r\n * @param state\r\n */\r\n clearInputItem(state: ExtendGenericState) {\r\n state.item.inputItem = {\r\n type: MachineMonitoringSearchType.None,\r\n machineKeyword: \"\",\r\n siteKeyword: \"\",\r\n reportKeyword: \"\",\r\n }\r\n\r\n },\r\n\r\n\r\n },\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: MachineMonitoringGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineMonitoringSlice.actions.fetchStart());\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n\r\n // 通信処理\r\n const machineWaiter = MachineMonitoringAdapter.instance.getAsync(parameter);\r\n const errorMachineWaiter = SharedAdapter.instance.getAllMachineErrorAsync();\r\n\r\n //まとめて取得\r\n const result = await Promise.all([machineWaiter, errorMachineWaiter]) // 直接配列に渡したらエラーなる\r\n const machineResult = result[0];\r\n const errorMachineResult = result[1];\r\n\r\n\r\n if (machineResult.isError) {\r\n // 異常\r\n dispatch(MachineMonitoringSlice.actions.fetchFailure(machineResult));\r\n\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(machineResult.errorMessage ?? \"\"));\r\n\r\n } else if (errorMachineResult.isError) {\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(errorMachineResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n // 正常\r\n dispatch(MachineMonitoringSlice.actions.fetchSuccess(machineResult));\r\n dispatch(updateCtuMachineError(errorMachineResult.errorMachineIds));\r\n\r\n // エラーの施工機があればリスト保存\r\n if (errorMachineResult.errorMachineIds.length) dispatch(setCtuMachineErrorOn());\r\n\r\n\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showSuccessMessage());\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MachineMonitoringSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(`${error}`));\r\n } finally {\r\n\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n // 処理中 OFF\r\n dispatch(MachineMonitoringSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * ロック解除処理を行います。\r\n * @param parameter\r\n */\r\nexport const onUnlockAsync = (parameter: MachineMonitoringUnlockRequest, inputItem: MachineMonitoringGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineMonitoringSlice.actions.fetchStart());\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n\r\n // 通信処理\r\n const machineWaiter = MachineMonitoringAdapter.instance.unlockAsync(parameter);\r\n const errorMachineWaiter = SharedAdapter.instance.getAllMachineErrorAsync();\r\n\r\n //まとめて取得\r\n const result = await Promise.all([machineWaiter, errorMachineWaiter]) // 直接配列に渡したらエラーなる\r\n const machineResult = result[0];\r\n const errorMachineResult = result[1];\r\n\r\n\r\n\r\n if (machineResult.isError) {\r\n // 異常\r\n dispatch(MachineMonitoringSlice.actions.fetchFailure(machineResult));\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(machineResult.errorMessage ?? \"\"));\r\n\r\n } else if (errorMachineResult.isError) {\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(errorMachineResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n // 正常\r\n dispatch(MachineMonitoringSlice.actions.fetchSuccess(machineResult));\r\n\r\n dispatch(updateCtuMachineError(errorMachineResult.errorMachineIds));\r\n\r\n // エラーの施工機があればリスト保存\r\n if (errorMachineResult.errorMachineIds.length) dispatch(setCtuMachineErrorOn());\r\n\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showSuccessMessage(\"施工機のロックを解除しました\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(MachineMonitoringSlice.actions.toggleDialog(false));\r\n\r\n // タイマー開始\r\n dispatch(startReloadTimer(inputItem));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(`${error}`));\r\n\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineMonitoringSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 解除アクション(Ctrl + Click)入力時の処理を行います。\r\n * @param parameter\r\n */\r\nexport const onRowUnlockClick = (parameter: MachineMonitoringListItem) => (dispatch: Dispatch) => {\r\n\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n\r\n // 行データ取得\r\n dispatch(MachineMonitoringSlice.actions.selectedRow(parameter));\r\n\r\n // ダイアログを開く\r\n dispatch(MachineMonitoringSlice.actions.toggleDialog(true));\r\n\r\n}\r\n\r\n/** ダイアログのクローズ処理を行います。 */\r\nexport const onCloseDialog = (parameter: MachineMonitoringGetRequest) => (dispatch: Dispatch) => {\r\n\r\n // ダイアログを閉じる\r\n dispatch(MachineMonitoringSlice.actions.toggleDialog(false));\r\n\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n}\r\n\r\n\r\n/**\r\n * 全エラー施工機一覧得処理を行います。\r\n */\r\nexport const onGetAllMachineErrorAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineMonitoringSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await SharedAdapter.instance.getAllMachineErrorAsync();\r\n\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n\r\n } else {\r\n\r\n // 正常\r\n dispatch(updateCtuMachineError(result.errorMachineIds));\r\n\r\n // エラーの施工機があればリスト保存\r\n if (result.errorMachineIds.length) dispatch(setCtuMachineErrorOn());\r\n\r\n\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showSuccessMessage());\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(`${error}`));\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineMonitoringSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n\r\n/** 一覧定期取得処理を行います。 */\r\nexport const onGetReloadAsync = (parameter: MachineMonitoringGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n\r\n // 実行\r\n await dispatch(onGetAsync(parameter));\r\n\r\n } catch (e) {\r\n //何もしない\r\n\r\n } finally {\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n }\r\n}\r\n\r\n/** リロードタイマーを停止します。 */\r\nexport const stopReloadTimer = () => (dispatch: Dispatch) => {\r\n\r\n // タイマー停止\r\n dispatch(MachineMonitoringSlice.actions.stopReloadTimer());\r\n}\r\n\r\n\r\n/** リロードタイマーを開始します。 */\r\nexport const startReloadTimer = (parameter: MachineMonitoringGetRequest) => (dispatch: Dispatch) => {\r\n\r\n // タイマー開始\r\n const timer = window.setTimeout(() => dispatch(onGetReloadAsync(parameter)), ReloadTimerInterval)\r\n dispatch(MachineMonitoringSlice.actions.startReloadTimer(timer));\r\n}\r\n","import { Dispatch } from 'redux';\r\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { MachineType, MachineItem, Machine } from '../../../_types';\r\nimport { HeaderMachineState } from '../../../pages/Shared/GlobalHeader/_types';\r\nimport { startReloadTimer, stopReloadTimer } from '../machine-monitoring/machine-monitoring-slice';\r\nimport { MachineMonitoringGetRequest } from '../../adapter/machine-monitoring/types';\r\n\r\n/**\r\n * ページ種別の列挙値を提供します。\r\n * */\r\nexport enum PageType {\r\n /** Home画面(施工機管理状況一覧)を表します。 */\r\n Home = 1,\r\n /** Record画面(整備記録など)を表します。 */\r\n Record = 2,\r\n /** Master画面を表します。 */\r\n Master = 3,\r\n /** Report画面(その他報告)を表します。 */\r\n Report = 4,\r\n}\r\n\r\n/**\r\n * CTUエラー施工機情報のインターフェースを提供します。\r\n * */\r\ninterface CtuErrorMachine {\r\n /** CTUエラー施工機があるかどうかを表します。 */\r\n isExistMachineError: boolean;\r\n /** エラー施工機の社番を表します。 */\r\n errorMachineIds: string[];\r\n}\r\n\r\n// ヘッダーの State を提供します。\r\ninterface State {\r\n /** タイトルを表します。 */\r\n title: string;\r\n /** 施工機情報を表します。 */\r\n machine?: HeaderMachineState;\r\n /** 表示画面種別を表します。 */\r\n pageType: PageType;\r\n /** エラー情報があるかどうかを表します。 */\r\n isError: boolean;\r\n /** CTUエラー施工機を表します。 */\r\n ctuErrorMachine: CtuErrorMachine;\r\n /** ダイアログを表示するかどうかを表します。 */\r\n isOpenDialog: boolean;\r\n}\r\n\r\n/** State の初期値を設定します。 */\r\nconst initialState: State = {\r\n title: \"施工機保全システム\",\r\n pageType: PageType.Home,\r\n isError: false,\r\n ctuErrorMachine: {\r\n isExistMachineError: false,\r\n errorMachineIds: [],\r\n },\r\n isOpenDialog: false,\r\n}\r\n\r\n/** State Reducer Action を生成します。 */\r\nexport const GlobalHeaderSlice = createSlice({\r\n name: 'globalHeader', // createSlice を識別するための名前\r\n initialState, // State の初期値を入れる\r\n reducers: { // State の変更処理\r\n\r\n /**\r\n * ヘッダーを変更します。\r\n * @param state\r\n * @param action\r\n */\r\n changeHeader(state: State, action: PayloadAction) {\r\n state = action.payload;\r\n },\r\n\r\n /**\r\n * タイトルを変更します。\r\n * @param state\r\n * @param action\r\n */\r\n changeTitle(state: State, action: PayloadAction) {\r\n state.title = action.payload;\r\n },\r\n\r\n /**\r\n * ページ種別を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n changePageType(state: State, action: PayloadAction) {\r\n state.pageType = action.payload;\r\n },\r\n\r\n /**\r\n * 施工機情報を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n changeMachine(state: State, action: PayloadAction) {\r\n state.machine = action.payload;\r\n },\r\n\r\n /**\r\n * エラー状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n changeError(state: State, action: PayloadAction) {\r\n state.isError = action.payload;\r\n },\r\n\r\n /**\r\n * CTUエラー施工機存在ありエラーを表示します。\r\n * @param state\r\n * @param action\r\n */\r\n setCtuMachineErrorOn(state: State) {\r\n state.ctuErrorMachine.isExistMachineError = true;\r\n },\r\n\r\n /**\r\n * CTUエラー施工機一覧の情報を更新します。\r\n * @param state\r\n * @param action\r\n */\r\n updateCtuMachineError(state: State, action: PayloadAction) {\r\n const machineIds = [...state.ctuErrorMachine.errorMachineIds, ...action.payload];\r\n state.ctuErrorMachine.errorMachineIds = machineIds.filter((machineId, index, self) => self.indexOf(machineId) === index);\r\n },\r\n\r\n /**\r\n * CTUエラー施工機一覧の情報をクリアします。\r\n * @param state\r\n * @param action\r\n */\r\n resetCtuMachineError(state: State) {\r\n state.ctuErrorMachine.isExistMachineError = false;\r\n state.ctuErrorMachine.errorMachineIds = [];\r\n },\r\n\r\n /**\r\n * ダイアログの開閉処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n toggleDialog(state: State, action: PayloadAction) {\r\n state.isOpenDialog = action.payload;\r\n },\r\n\r\n }\r\n})\r\n\r\nexport const { changeMachine } = GlobalHeaderSlice.actions;\r\nexport const { changeError } = GlobalHeaderSlice.actions;\r\nexport const { setCtuMachineErrorOn } = GlobalHeaderSlice.actions;\r\nexport const { updateCtuMachineError } = GlobalHeaderSlice.actions;\r\nexport const { resetCtuMachineError } = GlobalHeaderSlice.actions;\r\n\r\n/**\r\n * 施工機管理状況一覧のヘッダーを変更します。\r\n * @param title タイトル文字を指定します。\r\n */\r\nexport function changeMachineMonitoringHeader(title: string) {\r\n return (dispatch: Dispatch) => {\r\n // store 更新\r\n dispatch(GlobalHeaderSlice.actions.changeTitle(title)); // タイトル\r\n dispatch(GlobalHeaderSlice.actions.changePageType(PageType.Home)); // ページ種別 Home\r\n }\r\n}\r\n\r\n/**\r\n * 記録系画面のヘッダーを変更します。\r\n * @param title タイトル文字を指定します。\r\n */\r\nexport function changeRecordPageHeader(title: string) {\r\n return (dispatch: Dispatch) => {\r\n // store 更新\r\n dispatch(GlobalHeaderSlice.actions.changeTitle(title)); // タイトル\r\n dispatch(GlobalHeaderSlice.actions.changePageType(PageType.Record)); // ページ種別 Record\r\n }\r\n}\r\n\r\n\r\n/**\r\n * マスタ系画面のヘッダーを変更します。\r\n * @param title タイトル文字を指定します。\r\n */\r\nexport function changeMasterPageHeader(title: string) {\r\n return (dispatch: Dispatch) => {\r\n // store 更新\r\n dispatch(GlobalHeaderSlice.actions.changeTitle(title)); // タイトル\r\n dispatch(GlobalHeaderSlice.actions.changePageType(PageType.Master)); // ページ種別 Master\r\n }\r\n}\r\n\r\n/**\r\n * その他報告画面のヘッダーを変更します。\r\n * @param title タイトル文字を指定します。\r\n */\r\nexport function changeReportPageHeader(title: string) {\r\n return (dispatch: Dispatch) => {\r\n // store 更新\r\n dispatch(GlobalHeaderSlice.actions.changeTitle(title)); // タイトル\r\n dispatch(GlobalHeaderSlice.actions.changePageType(PageType.Report)); // ページ種別 Report\r\n }\r\n}\r\n\r\n/** ダイアログのクローズ処理を行います。 */\r\nexport function onCloseDialog(pageType: PageType, parameter: MachineMonitoringGetRequest) {\r\n return (dispatch: Dispatch) => {\r\n\r\n // ダイアログを閉じる\r\n dispatch(GlobalHeaderSlice.actions.toggleDialog(false));\r\n\r\n // 施工機管理状況一覧画面はタイマー再開\r\n if (pageType === PageType.Home) {\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n }\r\n }\r\n}\r\n\r\n/** ダイアログのオープン処理を行います。 */\r\nexport function onOpenDialog() {\r\n return (dispatch: Dispatch) => {\r\n\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n\r\n // ダイアログを開く\r\n dispatch(GlobalHeaderSlice.actions.toggleDialog(true));\r\n }\r\n}\r\n\r\n/** エラーリセット処理を行います。 */\r\nexport function onReset(pageType: PageType, parameter: MachineMonitoringGetRequest) {\r\n return (dispatch: Dispatch) => {\r\n\r\n // エラー表示をOFF\r\n dispatch(resetCtuMachineError());\r\n\r\n // ダイアログクローズ\r\n dispatch(onCloseDialog(pageType, parameter));\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n },\r\n }),\r\n);\r\n\r\n/** 上端下端レイアウトの Props を提供します。 */\r\ninterface Props {\r\n // 上端のコンテンツを表します。\r\n topContent: JSX.Element,\r\n /** 下端のコンテンツを表します。 */\r\n bottomContent: JSX.Element\r\n};\r\n\r\n/** 上端下端レイアウトを表示します。 */\r\nconst TopAndBottomLayout: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {props.topContent}\r\n \r\n\r\n \r\n {props.bottomContent}\r\n \r\n\r\n\r\n \r\n\r\n );\r\n}\r\n\r\nexport default TopAndBottomLayout;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Paper } from '@material-ui/core';\r\n\r\n/** 単一ページ(上部タブなし) のレイアウト を表示します。 */\r\nconst SinglePageLayout: React.FC<{}> = (props) => {\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default SinglePageLayout;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n// サイドの幅 文字列指定\r\nconst sideWidth = \"340px\";\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n },\r\n searchBox: {\r\n width: sideWidth,\r\n padding: theme.spacing(2),\r\n display: \"flex\",\r\n },\r\n tableBox: {\r\n flexGrow: 1,\r\n padding: theme.spacing(1),\r\n width: `calc(100% - (${sideWidth} + ${theme.spacing(2) * 2}px))`, // 横 100% - (検索入力項目 + padding(左右))\r\n },\r\n }),\r\n);\r\n\r\n/** 2 カラム レイアウト の Props を提供します。 */\r\ninterface Props {\r\n // サイドコンテンツを表します。\r\n side: React.ReactNode,\r\n // メインコンテンツを表します。\r\n main: React.ReactNode,\r\n};\r\n\r\n/** 2 カラム レイアウト を表示します。 */\r\nconst TwoColumnLayout: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {/* 検索エリア */}\r\n \r\n {props.side}\r\n \r\n\r\n {/* 検索結果 */}\r\n \r\n {props.main}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default TwoColumnLayout;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Backdrop, CircularProgress } from '@material-ui/core';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // バックドロップ\r\n backdrop: {\r\n zIndex: theme.zIndex.modal + 1,\r\n color: '#fff',\r\n },\r\n }),\r\n);\r\n\r\n/** ローディング画面の Props のインターフェイスを提供します。 */\r\ninterface Props {\r\n /** ローディング画面を表示するかどうかを表します。 */\r\n isLoading: boolean,\r\n}\r\n\r\n/**\r\n * ローディング画面を表示します。\r\n * @param props\r\n */\r\nconst MuiBackDropProgress: React.FC = (props) => {\r\n\r\n /** スタイルを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MuiBackDropProgress;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Snackbar } from '@material-ui/core';\r\nimport MuiAlert from '@material-ui/lab/Alert';\r\n// type\r\nimport { Message } from './types';\r\n\r\n/** スナックバーのPropsのインターフェイスを提供します。 */\r\ninterface Props {\r\n /** 表示するかどうかを表します。 */\r\n isOpen: boolean,\r\n /** メッセージを表します。 */\r\n message?: Message,\r\n /** 閉じる処理を提供します。 */\r\n onClose: (event?: React.SyntheticEvent, reason?: string) => void,\r\n}\r\n\r\n/**\r\n * スナックバーを表示します。\r\n * @param props\r\n */\r\nconst MuiSnackbar: React.FC = (props) => {\r\n\r\n /** 閉じる処理を行います。 */\r\n const handleClose = (event: React.SyntheticEvent | Event, reason?: string) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n props.onClose();\r\n };\r\n\r\n // メッセージがない場合\r\n if (!props.message) return (null);\r\n\r\n return (\r\n \r\n \r\n {props.message.text}\r\n \r\n \r\n )\r\n};\r\n\r\nexport default MuiSnackbar;\r\n","import * as React from 'react';\r\nimport { forwardRef } from 'react';\r\nimport { Icons } from 'material-table';\r\nimport AddBox from '@material-ui/icons/AddBox';\r\nimport ArrowUpward from '@material-ui/icons/ArrowUpward';\r\nimport Check from '@material-ui/icons/Check';\r\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRight from '@material-ui/icons/ChevronRight';\r\nimport Clear from '@material-ui/icons/Clear';\r\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\r\nimport Edit from '@material-ui/icons/Edit';\r\nimport FilterList from '@material-ui/icons/FilterList';\r\nimport FirstPage from '@material-ui/icons/FirstPage';\r\nimport LastPage from '@material-ui/icons/LastPage';\r\nimport Remove from '@material-ui/icons/Remove';\r\nimport SaveAlt from '@material-ui/icons/SaveAlt';\r\nimport Search from '@material-ui/icons/Search';\r\nimport ViewColumn from '@material-ui/icons/ViewColumn';\r\n\r\n// テーブルアイコン\r\nexport const MuiTableIcons: Icons = {\r\n Add: forwardRef((props, ref) =>\r\n \r\n ),\r\n Check: forwardRef((props, ref) =>\r\n \r\n ),\r\n Clear: forwardRef((props, ref) =>\r\n \r\n ),\r\n Delete: forwardRef((props, ref) =>\r\n \r\n ),\r\n DetailPanel: forwardRef((props, ref) =>\r\n \r\n ),\r\n Edit: forwardRef((props, ref) =>\r\n \r\n ),\r\n Export: forwardRef((props, ref) =>\r\n \r\n ),\r\n Filter: forwardRef((props, ref) =>\r\n \r\n ),\r\n FirstPage: forwardRef((props, ref) =>\r\n \r\n ),\r\n LastPage: forwardRef((props, ref) =>\r\n \r\n ),\r\n NextPage: forwardRef((props, ref) =>\r\n \r\n ),\r\n PreviousPage: forwardRef((props, ref) =>\r\n \r\n ),\r\n ResetSearch: forwardRef((props, ref) =>\r\n \r\n ),\r\n Search: forwardRef((props, ref) =>\r\n \r\n ),\r\n SortArrow: forwardRef((props, ref) =>\r\n \r\n ),\r\n ThirdStateCheck: forwardRef((props, ref) =>\r\n \r\n ),\r\n ViewColumn: forwardRef((props, ref) =>\r\n \r\n ),\r\n};\r\n","import { Localization } from 'material-table';\r\n\r\nexport const MuiLocalizationJapanese: Localization = {\r\n error: \"エラー\",\r\n body: {\r\n emptyDataSourceMessage: \"表示するレコードがありません。\",\r\n filterRow: {\r\n //filterPlaceHolder: \"\", Ver1.69用\r\n filterTooltip: \"フィルター\",\r\n },\r\n editRow: {\r\n saveTooltip: \"保存\",\r\n cancelTooltip: \"キャンセル\",\r\n deleteText: \"この行を削除しますか?\",\r\n },\r\n addTooltip: \"追加\",\r\n deleteTooltip: \"削除\",\r\n editTooltip: \"編集\",\r\n },\r\n header: {\r\n actions: \"\",\r\n },\r\n grouping: {\r\n groupedBy: \"グループ化:\",\r\n placeholder: \"ヘッダーをドラッグ ...\",\r\n },\r\n pagination: {\r\n firstTooltip: \"最初のページ\",\r\n firstAriaLabel: \"最初のページ\",\r\n previousTooltip: \"前のページ\",\r\n previousAriaLabel: \"前のページ\",\r\n nextTooltip: \"次のページ\",\r\n nextAriaLabel: \"次のページ\",\r\n labelDisplayedRows: \"{from}-{to} 全{count}項目\",\r\n labelRowsPerPage: \"ページあたりの行数:\",\r\n lastTooltip: \"最後のページ\",\r\n lastAriaLabel: \"最後のページ\",\r\n labelRowsSelect: \"行\",\r\n },\r\n toolbar: {\r\n addRemoveColumns: \"列の追加、削除\",\r\n nRowsSelected: \"{0} 行選択\",\r\n showColumnsTitle: \"列の表示\",\r\n showColumnsAriaLabel: \"列の表示\",\r\n exportTitle: \"出力\",\r\n exportAriaLabel: \"出力\",\r\n exportName: \"出力\",\r\n //exportCSVName: \"CSV出力\", Ver1.69用\r\n //exportPDFName: \"PDF出力\", Ver1.69用\r\n searchTooltip: \"絞り込み\",\r\n searchPlaceholder: \"絞り込み\",\r\n //clearSearchAriaLabel: \"クリア\", Ver1.69用\r\n },\r\n};\r\n","import { Options } from 'material-table';\r\n\r\n/** material-table の 共通オプションを提供します。 */\r\nexport const MuiTableOptions: Options = {\r\n toolbar: false,\r\n search: false,\r\n sorting: true,\r\n tableLayout: \"auto\",\r\n emptyRowsWhenPaging: false,\r\n pageSize: 100,\r\n pageSizeOptions: [10, 25, 50, 100],\r\n}\r\n","import { Theme, makeStyles, createStyles } from \"@material-ui/core\";\r\n\r\n/** スタイルを提供します。 */\r\nexport const useSortHeaderStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // テーブルソートヘッダー\r\n sortHeader: {\r\n // ソートされているカラム ヘッダー\r\n \"& .MuiTableSortLabel-active\": {\r\n color: theme.palette.text.primary,\r\n },\r\n // ソートアイコンカラー\r\n \"& .MuiTableSortLabel-active .MuiTableSortLabel-icon\": {\r\n color: `${theme.palette.text.primary}!important` as any,\r\n },\r\n // material-table スクロールバーをデフォルトに上書き\r\n \"& > div > div > div > div\": {\r\n overflowY: \"visible !important\",\r\n },\r\n }\r\n\r\n })\r\n);\r\n","import * as React from 'react';\r\nimport clsx from \"clsx\";\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Box } from '@material-ui/core';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // CTU接続あり\r\n connectedCtu: {\r\n borderStyle: \"solid\",\r\n borderRadius: \"4px 4px 0 4px\",\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 2,\r\n padding: 4,\r\n },\r\n // CTU タグ\r\n ctuTag: {\r\n fontSize: \"0.75rem\",\r\n padding: theme.spacing(0.25, 0.5, 0.25, 0.25),\r\n color: \"#fff\",\r\n backgroundColor: theme.palette.text.disabled,\r\n borderRadius: \"0 4px 4px 0\",\r\n }\r\n })\r\n);\r\n\r\n/** Props を提供します。 */\r\ninterface Props {\r\n /** 社番を表します。 */\r\n machineId: string,\r\n}\r\n\r\n/**\r\n * CTUありタグ付き社番を表示します。\r\n * @param props\r\n */\r\nconst CtuTagMachineId: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n {props.machineId}\r\n \r\n \r\n CTU\r\n \r\n );\r\n}\r\n\r\nexport default CtuTagMachineId;\r\n","// react\r\nimport * as React from 'react';\r\n// clsx\r\nimport clsx from \"clsx\";\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport {\r\n IconButton,\r\n Box,\r\n Chip\r\n} from '@material-ui/core';\r\nimport CtuTagMachineId from './CtuTagMachineId';\r\n// type\r\nimport { Machine, MachineType, MachineItem, ConnectedCtuType } from '../../../../../_types';\r\nimport { HeaderMachineState } from '../../../../Shared/GlobalHeader/_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ノートアイコン\r\n noteIconBox: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n flexWrap: \"nowrap\",\r\n color: theme.palette.text.secondary,\r\n },\r\n // ロック状態\r\n lockIcon: {\r\n color: theme.palette.success.main,\r\n },\r\n // 空の場合\r\n emptyNumber: {\r\n marginLeft: theme.spacing(3),\r\n },\r\n // 社番コンテナ\r\n machineIdContainer: {\r\n display: \"flex\",\r\n flexWrap: \"nowrap\",\r\n alignItems: \"baseline\",\r\n },\r\n // 社番テキスト\r\n machineIdColor: {\r\n color: theme.palette.text.primary,\r\n },\r\n // エラー情報アリ\r\n machineIdColorError: {\r\n color: theme.palette.error.contrastText,\r\n\r\n },\r\n // ベースマシンCTU接続無し\r\n disconnected: {\r\n paddingLeft: 6, // パディング4 + ボーダー2\r\n\r\n },\r\n // Noteアイコン月ボタン\r\n noteButton: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n },\r\n })\r\n);\r\n\r\n/** Props のインターフェイスを提供します。 */\r\ninterface Props {\r\n /** 施工機情報を表します。 */\r\n item: MachineItem,\r\n /** 施工機種別を表します。 */\r\n machineType: MachineType,\r\n /** ロック状態かどうかを表します。 */\r\n isLock: boolean,\r\n /** エラー情報かどうかを表します。 */\r\n isError: boolean,\r\n /** クリックイベントを表します。 */\r\n onNoteClick: (event: React.MouseEvent, machine: HeaderMachineState) => void,\r\n}\r\n\r\n/**\r\n * ノートアイコンボタンを付与した社番を表示します。\r\n * @param props\r\n */\r\nconst NoteIconButton: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {\r\n props.item.id ?\r\n (\r\n // ロック状態のアイコンは緑色\r\n \r\n {/* Note アイコン 付きボタン*/}\r\n }\r\n onClick={(event) => props.onNoteClick(\r\n event,\r\n {\r\n item: props.item,\r\n type: props.machineType,\r\n isLock: props.isLock,\r\n\r\n })}>\r\n\r\n \r\n {props.machineType === MachineType.BaseMachine\r\n // ベースマシン\r\n ? (\r\n props.item.ctu === ConnectedCtuType.Connected\r\n // CTUあり\r\n ? \r\n // CTUなし\r\n : {props.item.id}\r\n )\r\n\r\n // オーガー・昇降装置\r\n : ({props.item.id})\r\n }\r\n\r\n \r\n \r\n\r\n \r\n )\r\n : (\r\n // 無い場合、ハイフン表示\r\n
----
\r\n )\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default NoteIconButton;\r\n","import * as React from 'react';\r\nimport { useRef, useEffect, useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport Tooltip, { TooltipProps } from '@material-ui/core/Tooltip';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ツールチップ\r\n tooltip: {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n // ツールチップ タイトル\r\n title: {\r\n color: theme.palette.primary.contrastText,\r\n },\r\n // テキスト\r\n text: {\r\n backgroundColor: \"unset\",\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n }\r\n\r\n })\r\n);\r\n\r\n/**\r\n * オーバーフローしたテキストの Tooltip を表示します。\r\n * @param props\r\n */\r\nconst OverflowTooltip = (props: TooltipProps) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n const textElementRef = useRef(null);\r\n\r\n const compareSize = () => {\r\n\r\n if (textElementRef && textElementRef.current) {\r\n const compare =\r\n textElementRef.current.scrollWidth > textElementRef.current.clientWidth;\r\n setHover(compare);\r\n }\r\n };\r\n\r\n // remove resize listener again on \"componentWillUnmount\"\r\n useEffect(() => {\r\n compareSize();\r\n window.addEventListener('resize', compareSize);\r\n }, []);\r\n\r\n // remove resize listener again on \"componentWillUnmount\"\r\n useEffect(() => () => {\r\n window.removeEventListener('resize', compareSize);\r\n }, []);\r\n\r\n // Define state and function to update the value\r\n const [hoverStatus, setHover] = useState(false);\r\n\r\n return (\r\n {props.title}\r\n )\r\n }\r\n classes={{ tooltip: classes.tooltip }}\r\n >\r\n \r\n {props.children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default OverflowTooltip;\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Chip } from '@material-ui/core';\r\nimport SettingsEthernetIcon from '@material-ui/icons/SettingsEthernet';\r\nimport cyan from '@material-ui/core/colors/cyan';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // チップ\r\n chip: {\r\n marginLeft: theme.spacing(1),\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: cyan[700],\r\n },\r\n })\r\n);\r\n\r\n\r\n/**\r\n * タブレットアクセス状態のアイコンを表示します。\r\n */\r\nconst ConnectedTabletTag: React.FC<{}> = () => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default ConnectedTabletTag;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-table\r\nimport MaterialTable from 'material-table';\r\nimport { Column } from 'material-table';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// mateiral-ui\r\nimport { createStyles, makeStyles, Theme, useTheme, fade } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport indigo from '@material-ui/core/colors/indigo';\r\n// type\r\nimport { MachineType, MachineItem, Machine, AreaType } from '../../../../../_types'\r\nimport { MachineMonitoringListItem } from '../../_types';\r\n// component\r\nimport NoteIconButton from './NoteIconButton';\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\nimport { HeaderMachineState } from '../../../../Shared/GlobalHeader/_types';\r\nimport ConnectedTabletTag from './ConnectedTabletTag';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // テーブルソートヘッダー\r\n sortHeader: {\r\n // ソートされているカラム ヘッダー\r\n \"& .MuiTableSortLabel-active\": {\r\n color: theme.palette.text.primary,\r\n },\r\n // ソートアイコンカラー\r\n \"& .MuiTableSortLabel-active .MuiTableSortLabel-icon\": {\r\n color: `${theme.palette.text.primary}!important` as any,\r\n },\r\n // material-table スクロールバーをデフォルトに上書き\r\n \"& > div > div > div > div\": {\r\n overflowY: \"visible !important\",\r\n },\r\n }\r\n\r\n })\r\n);\r\n\r\n/** 施工機モニター テーブル の Props のインターフェイスを提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MachineMonitoringListItem[],\r\n /** テーブル行クリックイベントを表します。 */\r\n onRowClick: (event: React.MouseEvent, rowData: MachineMonitoringListItem) => void,\r\n /** ノートアイコンのクリックイベントを表します。 */\r\n onNoteClick: (event: React.MouseEvent, machine: HeaderMachineState) => void,\r\n}\r\n\r\n/** 施工機モニター テーブル の State のインターフェイスを提供します。 */\r\ninterface State {\r\n /** 施工機モニタテーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/**\r\n * 施工機モニター テーブルを提供します。\r\n * */\r\nconst ConstructionMachineTable: React.FC = (props) => {\r\n /** 施工機モニタテーブルのカラムを表します。 */\r\n const columnData: Column[] = [\r\n {\r\n title: \"オンライン\",\r\n field: \"isConnectedTablet\",\r\n width: 100,\r\n render: (rowData: MachineMonitoringListItem) => (\r\n rowData.isConnectedTablet && \r\n ),\r\n },\r\n {\r\n title: \"ベースマシン\",\r\n field: \"baseMachine\",\r\n cellStyle: {\r\n width: 200,\r\n minWidth: 200,\r\n padding: \"0px 5px\",\r\n },\r\n customSort: (a: MachineMonitoringListItem, b: MachineMonitoringListItem) => (a.baseMachine.id > b.baseMachine.id ? 1 : -1),\r\n render: (rowData: MachineMonitoringListItem) => (\r\n \r\n ),\r\n },\r\n {\r\n title: \"オーガー\",\r\n field: \"auger\",\r\n cellStyle: {\r\n width: 200,\r\n minWidth: 200,\r\n padding: \"0px 5px\",\r\n\r\n },\r\n customSort: (a: MachineMonitoringListItem, b: MachineMonitoringListItem) => (a.auger.id > b.auger.id ? 1 : -1),\r\n render: (rowData: MachineMonitoringListItem) => (\r\n \r\n ),\r\n },\r\n {\r\n\r\n title: \"昇降装置\",\r\n field: \"lift\",\r\n cellStyle: {\r\n width: 200,\r\n minWidth: 200,\r\n padding: \"0px 5px\",\r\n },\r\n customSort: (a: MachineMonitoringListItem, b: MachineMonitoringListItem) => (a.lift.id > b.lift.id ? 1 : -1),\r\n render: (rowData: MachineMonitoringListItem) => (\r\n \r\n ),\r\n },\r\n {\r\n title: \"作業場所\",\r\n field: \"site\",\r\n },\r\n {\r\n title: \"CTUエラー\",\r\n field: \"ctuError\",\r\n cellStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n headerStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n render: (rowData: MachineMonitoringListItem) => (\r\n \r\n <>{rowData.ctuError}\r\n \r\n ),\r\n },\r\n\r\n {\r\n title: \"報告事項\",\r\n field: \"reportItem\",\r\n cellStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n headerStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n render: (rowData: MachineMonitoringListItem) => (\r\n \r\n <>{rowData.reportItem}\r\n \r\n ),\r\n },\r\n\r\n ];\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n const theme = useTheme();\r\n\r\n const [values, setValues] = useState({\r\n columns: columnData,\r\n });\r\n\r\n /**\r\n * ソート変更時のイベント処理を行います。\r\n * @param orderBy\r\n * @param orderDirection\r\n */\r\n const onOrderChange = (orderBy: number, orderDirection: \"asc\" | \"desc\"): void => {\r\n\r\n // 再レンダーされる時にソート順がリセットされないようにState で保持する\r\n setValues({\r\n columns: values.columns.map((column, index) => {\r\n if (index === orderBy) {\r\n column.defaultSort = orderDirection;\r\n } else {\r\n delete column.defaultSort\r\n }\r\n return column;\r\n })\r\n })\r\n };\r\n\r\n /**\r\n * 行クリックイベントをハンドルします。\r\n * @param event\r\n * @param rowData\r\n */\r\n const hundleRowClick = (event?: React.MouseEvent, rowData?: MachineMonitoringListItem) => {\r\n\r\n if (event && rowData) {\r\n // 行クリックイベント実行\r\n props.onRowClick(event, rowData);\r\n }\r\n }\r\n\r\n /**\r\n * 行毎のスタイルをレンダリングします。\r\n * @param rowData\r\n */\r\n const renderRowStyle = (rowData: MachineMonitoringListItem): React.CSSProperties => {\r\n let result: React.CSSProperties = {};\r\n if (rowData.ctuError) {\r\n // エラー情報があるものは背景を赤くする\r\n result = {\r\n color: theme.palette.error.contrastText,\r\n backgroundColor: fade(theme.palette.error.main, 1),\r\n }\r\n } else {\r\n // スタイル指定なし\r\n }\r\n\r\n return result;\r\n\r\n }\r\n\r\n return (\r\n \r\n renderRowStyle(rowData),\r\n }}\r\n columns={values.columns}\r\n data={props.dataSource}\r\n onRowClick={(event, rowData) => hundleRowClick(event, rowData)}\r\n onOrderChange={onOrderChange}\r\n />\r\n \r\n );\r\n\r\n}\r\n\r\nexport default ConstructionMachineTable;\r\n","/**\r\n * アプリケーションの URL を提供します。\r\n *\r\n */\r\nexport class AppUrl {\r\n\r\n //#region フィールド\r\n\r\n /** ルートを表します。 */\r\n public static readonly root = new AppUrl(\"/\");\r\n\r\n /** [Account] サインインを表します。 */\r\n public static readonly accountSignIn = new AppUrl(\"/signin\");\r\n ///** [Account] サインアウトを表します。 */\r\n //public static readonly accountSignOut = new AppUrl(\"/Account/SignOut\");\r\n\r\n /** [Home] 施工機管理状況一覧(Home)を表します。 */\r\n public static readonly machineMonitoring = new AppUrl(\"/construction-machine-monitor\");\r\n\r\n /** [Home] その他報告を表します。 */\r\n public static readonly otherReport = new AppUrl(\"/other-report\");\r\n\r\n /** [Home] ファイルアップロードを表します。 */\r\n public static readonly fileManage = new AppUrl(\"/file-manage\");\r\n\r\n /** [Master] ルートを表します。 */\r\n public static readonly master = new AppUrl(\"/master\");\r\n /** [Master] 施工機マスタを表します。 */\r\n public static readonly masterMachine = new AppUrl(\"/master/machine\");\r\n /** [Master] 型式マスタを表します。 */\r\n public static readonly masterModel = new AppUrl(\"/master/model\");\r\n /** [Master] メーカーマスタを表します。 */\r\n public static readonly masterManufacturer = new AppUrl(\"/master/manufacturer\");\r\n /** [Master] 工法マスタを表します。 */\r\n public static readonly masterMethod = new AppUrl(\"/master/method\");\r\n /** [Master] 整備区分マスタを表します。 */\r\n public static readonly masterMaintenanceDivisioin = new AppUrl(\"/master/maintenance-division\");\r\n /** [Master] 整備項目マスタを表します。 */\r\n public static readonly masterMaintenanceItem = new AppUrl(\"/master/maintenance-items\");\r\n /** [Master] 特記事項マスタを表します。 */\r\n public static readonly masterRemarks = new AppUrl(\"/master/remarks\");\r\n /** [Master] 点検区分マスタを表します。 */\r\n public static readonly masterInspectionDivision = new AppUrl(\"/master/inspection-division\");\r\n /** [Master] 点検項目マスタを表します。 */\r\n public static readonly masterInspectionItem = new AppUrl(\"/master/inspection-items\");\r\n /** [Master] ユーザーマスタを表します。 */\r\n public static readonly masterUser = new AppUrl(\"/master/user\");\r\n\r\n /** [Record] ルートを表します。 */\r\n public static readonly record = new AppUrl(\"/construction-machine-master\");\r\n /** [Record] 整備記録を表します。 */\r\n public static readonly recordMaintenanceRecord = new AppUrl(\"/construction-machine-master/maintenance\");\r\n /** [Record] 日常点検記録を表します。 */\r\n public static readonly recordDailyInspectionRecord = new AppUrl(\"/construction-machine-master/daily-inspection\");\r\n /** [Record] 週間月例点検記録を表します。 */\r\n public static readonly recordWeeklyInspectionRecord = new AppUrl(\"/construction-machine-master/weekly-inspection\");\r\n /** [Record] 現場完了時点検記録を表します。 */\r\n public static readonly recordCompletionInspectionRecord = new AppUrl(\"/construction-machine-master/completion-inspection\");\r\n /** [Record] 施工記録を表します。 */\r\n public static readonly recordConstructionRecord = new AppUrl(\"/construction-machine-master/construction\");\r\n /** [Record] 施工機ステータスを表します。 */\r\n public static readonly recordMachineStatus = new AppUrl(\"/construction-machine-master/status\");\r\n /** [Record] 施工機メンテナンス設定を表します。*/\r\n public static readonly recordMachineMaintenanceSetting = new AppUrl(\"/construction-machine-master/machine-maintenance-setting\");\r\n /** [Record] アラート記録を表します。 */\r\n public static readonly recordAlertRecord = new AppUrl(\"/construction-machine-master/alert\");\r\n\r\n /** パスを表します。 */\r\n public readonly path: string = \"\" // UE.String.empty;\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n * @param path パスを指定します。\r\n * @throws {UE.ArgumentNullOrWhiteSpaceError} `path` が `null` (未定義) または空白の場合に発生します。\r\n */\r\n private constructor(path: string) {\r\n if (!path) {//if(UE.Validator.isNullOrWhitespace(path)) {\r\n throw new Error(\"path\") // UE.ArgumentNullOrWhiteSpaceError(\"path\");\r\n }\r\n this.path = path;\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// router\r\nimport { useHistory } from 'react-router-dom';\r\n// type\r\nimport { MachineMonitoringListItem, MachineMonitoringSearchType } from '../../_types';\r\n// component\r\nimport ConstructionMachineTable from './ConstructionMachineMonitorTable';\r\nimport { MachineType, MachineItem, Machine, AreaType } from '../../../../../_types';\r\n\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { changeMachine } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport { MachineMonitoringSlice, onGetAsync, onRowUnlockClick } from '../../../../../modules/slice/machine-monitoring/machine-monitoring-slice';\r\nimport { HeaderMachineState } from '../../../../Shared/GlobalHeader/_types';\r\nimport { AppUrl } from '../../../../Shared/app-url';\r\n\r\n/**\r\n * 施工機モニター テーブルを提供します。\r\n * */\r\nexport const ConstructionMachineMonitorTableContainer: React.FC<{}> = () => {\r\n\r\n /** historyを提供します。 */\r\n const history = useHistory();\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data = useSelector((state: RootState) => state.machineMonitoring.result.items);\r\n const areaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * テーブル行クリック時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (event: React.MouseEvent, rowData: MachineMonitoringListItem) => {\r\n\r\n if (event.ctrlKey && rowData.isLock) {\r\n // ctrl + Click の場合\r\n\r\n //選択された行データを保持し、ダイアログ表示\r\n dispatch(onRowUnlockClick(rowData));\r\n }\r\n }\r\n\r\n /**\r\n * 施工機管理画面(整備記録etc)へ遷移処理を行います。\r\n * @param number\r\n * @param machineType\r\n */\r\n const navigateMachineMaster = (selectedMachine: HeaderMachineState) => {\r\n\r\n // 画面遷移\r\n history.push({\r\n // ベースマシンが選択されたときは施工機ステータスを、それ以外の場合は整備記録を初期表示とする\r\n pathname: selectedMachine.type == MachineType.BaseMachine && selectedMachine.isLock ? AppUrl.recordMachineStatus.path : AppUrl.recordMaintenanceRecord.path,\r\n state: selectedMachine,\r\n });\r\n }\r\n\r\n /**\r\n * ノートボタンクリック時のイベント処理を行います。\r\n * @param number\r\n * @param machineType\r\n */\r\n const onNoteClick = (event: React.MouseEvent, selectedMachine: HeaderMachineState) => {\r\n\r\n if (event.ctrlKey) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n // ヘッダー施工機種別・社番変更\r\n dispatch(changeMachine(selectedMachine));\r\n\r\n // 画面遷移\r\n navigateMachineMaster(selectedMachine);\r\n };\r\n\r\n /**\r\n * エリア種別のフィルター処理を行います。\r\n * @param source テーブルデータを指定します。\r\n * @param areaType エリア種別を指定します。\r\n * @returns フィルタ後のテーブルデータを返します。\r\n */\r\n const areaTypeFilter = (source: MachineMonitoringListItem[], areaType: AreaType) => {\r\n\r\n // エリアが確定していない施工機は全国でしか表示しない。\r\n // material-tableにデータをそのまま渡すとErrorになるので複製・参照を切る\r\n return source.filter(item => (areaType === AreaType.None ? true : item.areaType === areaType)).map(item => ({ ...item }));\r\n\r\n }\r\n\r\n return (\r\n <>\r\n {/* テーブル */}\r\n \r\n\r\n \r\n );\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\n/**\r\n * 検索ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiSearchButton: React.FC = (props) => {\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n 検索\r\n \r\n )\r\n}\r\n\r\nexport default MuiSearchButton;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n TextField,\r\n FormControlLabel,\r\n Box,\r\n RadioGroup,\r\n Radio,\r\n FormControl,\r\n} from '@material-ui/core';\r\n// component\r\nimport { MachineMonitoringInputItem, MachineMonitoringSearchType } from '../../_types'\r\n// 共通component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタンラベル\r\n radioGroupLabel: {\r\n fontWeight: \"bold\",\r\n marginTop: theme.spacing(1),\r\n },\r\n // ラジオボタン\r\n radioGroup: {\r\n display: \"inline-flex\",\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // グループ化 枠\r\n groupContainer: {\r\n position: \"relative\",\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderStyle: \"solid\",\r\n borderRadius: 4,\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n\r\n },\r\n // グループ化 タイトル\r\n groupTitle: {\r\n position: \"absolute\",\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n top: \"-12px\",\r\n left: \"-8px\",\r\n fontWeight: \"bold\",\r\n backgroundColor: theme.palette.background.paper,\r\n }\r\n\r\n }),\r\n);\r\n\r\n/** 施工機モニター画面 検索エリアのPropsを表示します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (inputItem: MachineMonitoringInputItem) => void\r\n}\r\n\r\n/** 施工機モニター画面 検索エリアを表示します。 */\r\nconst ConstructionMachineMonitorSearch: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: MachineMonitoringSearchType.None, label: \"すべて\" },\r\n { key: MachineMonitoringSearchType.BaseMachine, label: \"ベースマシン\" },\r\n { key: MachineMonitoringSearchType.Auger, label: \"オーガー\" },\r\n { key: MachineMonitoringSearchType.Lift, label: \"昇降装置\" },\r\n\r\n ];\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力項目を提供します。*/\r\n const [values, setValues] = useState({\r\n machineKeyword: \"\",\r\n type: MachineMonitoringSearchType.None,\r\n siteKeyword: \"\",\r\n reportKeyword: \"\",\r\n });\r\n\r\n /** 入力項目の変更状態を提供します。*/\r\n const [isInputChange, setIsInputChange] = useState(false);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onInputChange = (name: keyof MachineMonitoringInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n setIsInputChange(true);\r\n\r\n };\r\n\r\n /**\r\n * 検索ボタンクリック時の処理を行います。\r\n * @param event\r\n */\r\n const onSearchClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n setIsInputChange(false);\r\n props.onSearchClick(values)\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n 施工機\r\n \r\n\r\n \r\n\r\n \r\n\r\n {radioButtons.map((value, index) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n
\r\n\r\n\r\n \r\n\r\n \r\n\r\n\r\n {/* 検索ボタン */}\r\n onSearchClick(event)}\r\n />\r\n\r\n
\r\n \r\n );\r\n\r\n\r\n};\r\n\r\nexport default ConstructionMachineMonitorSearch;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch } from 'react-redux';\r\nimport { onGetAsync, MachineMonitoringSlice } from '../../../../../modules/slice/machine-monitoring/machine-monitoring-slice';\r\n// component\r\nimport { MachineMonitoringInputItem } from '../../_types';\r\nimport ConstructionMachineMonitorSearch from './ConstructionMachineMonitorSearch';\r\n\r\n/** 施工機モニター画面 検索エリアを表示します。 */\r\nexport const ConstructionMachineMonitorSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (inputItem: MachineMonitoringInputItem) => {\r\n dispatch(MachineMonitoringSlice.actions.changeInputItem(inputItem));\r\n // 一覧取得\r\n await dispatch(onGetAsync({ item: inputItem }));\r\n\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\n\r\n/**\r\n * キャンセル ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiCancelButton: React.FC = (props) => {\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n キャンセル\r\n \r\n )\r\n}\r\n\r\nexport default MuiCancelButton;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport LockOpenIcon from '@material-ui/icons/LockOpen';\r\nimport amber from '@material-ui/core/colors/amber';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n backgroundColor: amber[500],\r\n color: '#fff',\r\n \"&:hover\": {\r\n backgroundColor: '#b28704',\r\n },\r\n \"&:disabled\": {\r\n backgroundColor: '#ffcd38',\r\n }\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * ロック解除ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiUnlockButton: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n ロック解除\r\n \r\n )\r\n}\r\n\r\nexport default MuiUnlockButton;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport { MachineMonitoringListItem } from '../../_types';\r\n\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiUnlockButton from '../../../../../components/Buttons/MuiUnlockButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ヘッダー\r\n header: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText\r\n },\r\n\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // 施工機Box\r\n machinBox: {\r\n backgroundColor: fade(theme.palette.secondary.main, 0.3),\r\n margin: theme.spacing(1),\r\n padding: theme.spacing(1),\r\n },\r\n // 施工機タイトル\r\n machineTitle: {\r\n fontWeight: \"bolder\",\r\n },\r\n // 施工機情報項目\r\n machineItem: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** アンロック確認ダイアログを表示します。 */\r\ninterface Props {\r\n /** 選択された項目を表します。 */\r\n selectedRowItem: MachineMonitoringListItem,\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** Yesボタンクリック時の処理を表します。 */\r\n onUnlockClick: () => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n}\r\n\r\n/**\r\n * アンロック確認ダイアログを表示します。\r\n * @param props\r\n */\r\nconst UnlockDialog: React.FC = (props: Props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n }, [props.isOpen])\r\n\r\n return (\r\n <>\r\n {props.selectedRowItem &&\r\n props.handleClose()}\r\n >\r\n\r\n {/* タイトル */}\r\n \r\n \r\n 施工機ロック解除\r\n \r\n \r\n \r\n {/* message */}\r\n \r\n 以下の施工機のロックを解除します。よろしいですか?\r\n \r\n\r\n {/* 各施工機 */}\r\n \r\n\r\n {/* ベースマシン */}\r\n \r\n \r\n ベースマシン\r\n \r\n \r\n \r\n 社番\r\n \r\n \r\n {props.selectedRowItem.baseMachine.id}\r\n \r\n \r\n \r\n \r\n メーカー\r\n \r\n \r\n {props.selectedRowItem.baseMachine.manufacturer}\r\n \r\n \r\n \r\n \r\n 型式\r\n \r\n \r\n {props.selectedRowItem.baseMachine.model}\r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* オーガー */}\r\n \r\n \r\n\r\n オーガー\r\n \r\n \r\n \r\n 社番\r\n \r\n \r\n {props.selectedRowItem.auger.id}\r\n \r\n \r\n \r\n \r\n メーカー\r\n \r\n \r\n {props.selectedRowItem.auger.manufacturer}\r\n \r\n \r\n \r\n \r\n 型式\r\n \r\n \r\n {props.selectedRowItem.auger.model}\r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* 昇降装置 */}\r\n \r\n \r\n\r\n 昇降装置\r\n \r\n \r\n \r\n 社番\r\n \r\n \r\n {props.selectedRowItem.lift.id}\r\n \r\n \r\n \r\n \r\n メーカー\r\n \r\n \r\n {props.selectedRowItem.lift.manufacturer}\r\n \r\n \r\n \r\n \r\n 型式\r\n \r\n \r\n {props.selectedRowItem.lift.model}\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n props.handleClose()}\r\n />\r\n props.onUnlockClick()}\r\n />\r\n \r\n \r\n }\r\n \r\n )\r\n}\r\nexport default UnlockDialog\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MachineMonitoringSlice, onUnlockAsync, onCloseDialog } from '../../../../../modules/slice/machine-monitoring/machine-monitoring-slice';\r\n\r\n// component\r\nimport { MachineMonitoringListItem } from '../../_types';\r\nimport UnlockDialog from './UnlockDialog';\r\n\r\n/**\r\n * アンロック確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const UnlockDialogContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpenDialog = useSelector((state: RootState) => state.machineMonitoring.item.isOpenDialog);\r\n const selectedRowItem = useSelector((state: RootState) => state.machineMonitoring.item.selectedRowItem);\r\n const inputItem = useSelector((state: RootState) => state.machineMonitoring.item.inputItem);\r\n\r\n /** ロック解除クリック処理を行います。 */\r\n const onUnlockClickAsync = async () => {\r\n\r\n if (!selectedRowItem || !selectedRowItem.tabletId) {\r\n dispatch(MachineMonitoringSlice.actions.showErrorMessage(\"タブレットIDが指定されていません\"))\r\n return;\r\n }\r\n\r\n // ロック解除\r\n await dispatch(onUnlockAsync({ tabletId: selectedRowItem.tabletId }, { item: inputItem }));\r\n }\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n dispatch(onCloseDialog({ item: inputItem }));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedRowItem && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","/**\r\n * アプリケーションの画面タイトルを提供します。\r\n *\r\n */\r\nexport class AppTitle {\r\n\r\n //#region フィールド\r\n\r\n /** App を表します。 */\r\n public static readonly app = new AppTitle(\"施工機保全システム\");\r\n\r\n /** [Account] サインインを表します。 */\r\n public static readonly accountSignIn = new AppTitle(\"サインイン\");\r\n\r\n /** [Home] 施工機管理状況一覧(Home)を表します。 */\r\n public static readonly machineMonitoring = new AppTitle(\"施工機管理状況一覧\");\r\n\r\n /** [Other] その他報告を表します。 */\r\n public static readonly otherReport = new AppTitle(\"その他報告\");\r\n\r\n /** [FileManage] ファイル管理を表します。 */\r\n public static readonly fileManage = new AppTitle(\"ファイル管理\");\r\n\r\n /** [Master] 施工機マスタを表します。 */\r\n public static readonly masterMachine = new AppTitle(\"施工機マスタ\");\r\n /** [Master] 型式マスタを表します。 */\r\n public static readonly masterModel = new AppTitle(\"型式マスタ\");\r\n /** [Master] メーカーマスタを表します。 */\r\n public static readonly masterManufacturer = new AppTitle(\"メーカーマスタ\");\r\n /** [Master] 工法マスタを表します。 */\r\n public static readonly masterMethod = new AppTitle(\"工法マスタ\");\r\n /** [Master] 整備区分マスタを表します。 */\r\n public static readonly masterMaintenanceDivisioin = new AppTitle(\"整備区分マスタ\");\r\n /** [Master] 整備項目マスタを表します。 */\r\n public static readonly masterMaintenanceItem = new AppTitle(\"整備項目マスタ\");\r\n /** [Master] 特記事項マスタを表します。 */\r\n public static readonly masterRemarks = new AppTitle(\"特記事項マスタ\");\r\n /** [Master] 点検区分マスタを表します。 */\r\n public static readonly masterInspectionDivision = new AppTitle(\"点検区分マスタ\");\r\n /** [Master] 点検項目マスタを表します。 */\r\n public static readonly masterInspectionItem = new AppTitle(\"点検項目マスタ\");\r\n /** [Master] ユーザーマスタを表します。 */\r\n public static readonly masterUser = new AppTitle(\"ユーザーマスタ\");\r\n\r\n /** [Record] 整備記録を表します。 */\r\n public static readonly recordMaintenanceRecord = new AppTitle(\"整備記録\");\r\n /** [Record] 日常点検記録を表します。 */\r\n public static readonly recordDailyInspectionRecord = new AppTitle(\"日常点検記録\");\r\n /** [Record] 週間月例点検記録を表します。 */\r\n public static readonly recordWeeklyInspectionRecord = new AppTitle(\"週間月例点検記録\");\r\n /** [Record] 現場完了時点検記録を表します。 */\r\n public static readonly recordCompletionInspectionRecord = new AppTitle(\"現場完了時点検記録\");\r\n /** [Record] 施工記録を表します。 */\r\n public static readonly recordConstructionRecord = new AppTitle(\"施工記録\");\r\n /** [Record] 施工機ステータスを表します。 */\r\n public static readonly recordMachineStatus = new AppTitle(\"施工機ステータス\");\r\n /** [Record] 施工機メンテナンス設定を表します。*/\r\n public static readonly recordMachineMaintenanceSetting = new AppTitle(\"施工機メンテナンス設定\");\r\n /** [Record] アラート記録を表します。 */\r\n public static readonly recordAlertRecord = new AppTitle(\"アラート記録\");\r\n\r\n /** タイトルを表します。 */\r\n public readonly title: string = \"\" // UE.String.empty;\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n * @param title パスを指定します。\r\n * @throws {UE.ArgumentNullOrWhiteSpaceError} `title` が `null` (未定義) または空白の場合に発生します。\r\n */\r\n private constructor(title: string) {\r\n if (!title) {//if(UE.Validator.isNullOrWhitespace(title)) {\r\n throw new Error(\"title\") // UE.ArgumentNullOrWhiteSpaceError(\"title\");\r\n }\r\n this.title = title;\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// type\r\nimport { AreaType } from '../../../_types';\r\n// cookies\r\nimport * as Cookies from \"js-cookie\";\r\n\r\n\r\n/**\r\n * エリア種別 関連の ユーティリティ機能を提供します。\r\n * */\r\nexport class AreaTypeUtility {\r\n\r\n /** ストレージのエリア種別の Key を表します。*/\r\n static readonly KeyAreaType = \"AreaType\";\r\n\r\n /**\r\n * エリア種別に変換します。\r\n * @param value 文字列指定します。\r\n * @returns エリア種別を返します。\r\n */\r\n public static toAreaType(value: string): AreaType {\r\n\r\n const parsedValue = Number.isNaN(Number.parseInt(value, 10)) ? 0 : Number.parseInt(value, 10);\r\n\r\n const result = parsedValue in AreaType ? (parsedValue as AreaType) : AreaType.None;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * ストレージ にあるエリア種別を取得します。\r\n * @returns エリア種別を返します。\r\n * */\r\n public static getStorageAreaType(): AreaType {\r\n\r\n const data = Cookies.get(AreaTypeUtility.KeyAreaType);\r\n\r\n const result = data == null ? AreaType.None : AreaTypeUtility.toAreaType(data);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * ストレージにエリア種別を設定します。\r\n * @param value エリア種別を指定します。\r\n */\r\n public static setStorageAreaType(value: AreaType): void {\r\n // Cookie セット 有効期限 7 日\r\n Cookies.set(AreaTypeUtility.KeyAreaType, value.toString(), { expires: 7 });\r\n }\r\n\r\n /**\r\n * Cookieの有効期限を延長します。\r\n * */\r\n public static extendExpiresAreaType(): void {\r\n\r\n const areaType = AreaTypeUtility.getStorageAreaType();\r\n\r\n if (areaType) AreaTypeUtility.setStorageAreaType(areaType);\r\n\r\n }\r\n\r\n}\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { Dispatch } from 'redux';\r\nimport { AreaType } from '../../../_types';\r\nimport { AreaTypeUtility } from './area-type-slice-utility';\r\n\r\n/** エリア種別選択の State を提供します。 */\r\ninterface State {\r\n /** エリアを表します。 */\r\n area: AreaType;\r\n}\r\n\r\n/** State の初期値を設定します。 */\r\nconst initialState: State = {\r\n area: AreaTypeUtility.getStorageAreaType(),\r\n}\r\n\r\n\r\n/** エリア種別 Slice を 提供します。*/\r\nexport const areaTypeSlice = createSlice({\r\n name: 'areaType', // createSlice を識別するための名前\r\n initialState, // State の初期値を入れる\r\n reducers: { // State の変更処理\r\n\r\n /**\r\n * エリア種別を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n setAreaType(state: State, action: PayloadAction) {\r\n state.area = action.payload.area;\r\n },\r\n }\r\n})\r\n\r\n/**\r\n * エリア種別を変更します。\r\n * @param area エリア種別を指定します。\r\n */\r\nexport function changeAreaType(selectedArea: AreaType) {\r\n return (dispatch: Dispatch) => {\r\n // ストレージ更新\r\n AreaTypeUtility.setStorageAreaType(selectedArea);\r\n\r\n // store 更新\r\n dispatch(areaTypeSlice.actions.setAreaType({ area: selectedArea }))\r\n }\r\n}\r\n","//react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {\r\n Box,\r\n Paper,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport {\r\n ToggleButton,\r\n ToggleButtonGroup,\r\n} from '@material-ui/lab';\r\n// type\r\nimport { AreaType } from '../../_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n paper: {\r\n display: 'flex',\r\n border: `1px solid ${theme.palette.divider}`,\r\n flexWrap: 'wrap',\r\n justifyContent: \"center\",\r\n },\r\n root: {\r\n \"&.Mui-selected\": {\r\n color: theme.palette.primary.contrastText,\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n \"&.Mui-selected:hover\": {\r\n backgroundColor: theme.palette.primary.main,\r\n }\r\n },\r\n grouped: {\r\n margin: theme.spacing(0.5),\r\n border: 'none',\r\n '&:not(:first-child)': {\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n '&:first-child': {\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n },\r\n }),\r\n);\r\n\r\n/** エリア選択のトグルボタングループ の Props を提供します */\r\ninterface Props {\r\n /** エリアを表します。*/\r\n area: AreaType,\r\n /** エリア選択時のイベント処理を表します */\r\n onChangeArea: (event: React.MouseEvent, selectedAera: AreaType | null) => void,\r\n}\r\n\r\n/**\r\n * エリア選択のトグルボタングループを表示します。\r\n * */\r\nexport default function AreaToggleButton(props: Props) {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n\r\n \r\n 所属\r\n \r\n\r\n \r\n props.onChangeArea(event, value)}\r\n aria-label=\"area-type\"\r\n >\r\n \r\n \r\n 全国\r\n \r\n \r\n \r\n \r\n 西地区\r\n \r\n \r\n \r\n \r\n 東地区\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","//react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../rootReducer';\r\nimport { areaTypeSlice, changeAreaType } from '../../modules/slice/area-type/area-type-slice'\r\nimport { AreaTypeUtility } from '../../modules/slice/area-type/area-type-slice-utility'\r\n\r\n// type\r\nimport { AreaType } from '../../_types';\r\nimport AreaToggleButton from './AreaToggleButton'\r\n\r\n/**\r\n * エリア選択のトグルボタングループを表示します。\r\n * */\r\nexport function AreaToggleButtonContainer() {\r\n\r\n // redux\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const areaType: AreaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * エリア選択時のイベント処理を行います。\r\n * @param event\r\n * @param selectedAera\r\n */\r\n const onChangeArea = (event: React.MouseEvent, selectedAera: AreaType | null) => {\r\n if (selectedAera !== null) {\r\n dispatch(changeAreaType(selectedAera));\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n // ストレージ更新\r\n AreaTypeUtility.extendExpiresAreaType();\r\n }, [])\r\n\r\n\r\n return (\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMachineMonitoringHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MachineMonitoringSlice, onGetAsync } from '../../../modules/slice/machine-monitoring/machine-monitoring-slice';\r\n// component\r\nimport TopAndBottomLayout from '../../../components/Layout/TopAndBottomLayout';\r\nimport SinglePageLayout from '../../../components/Layout/SinglePageLayout';\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { ConstructionMachineMonitorTableContainer } from './components/TableContent/ConstructionMachineMonitorTableContainer';\r\nimport { ConstructionMachineMonitorSearchContainer } from './components/SerachContent/ConstructionMachineMonitorSearchContainer';\r\nimport { UnlockDialogContainer } from './components/UnlockDialog/UnlockDialogContainer';\r\nimport { MachineMonitoringSearchType } from './_types';\r\nimport { AppTitle } from '../../Shared/app-title';\r\nimport { AreaToggleButtonContainer } from '../../../components/AreaToggleButton/AreaToggleButtonContainer';\r\n\r\n\r\n/** 施工機モニター画面を提供します。 */\r\nexport const ConstructionMachineMonitoringPage: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.machineMonitoring.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.machineMonitoring.isShowMessage);\r\n const message = useSelector((state: RootState) => state.machineMonitoring.message);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MachineMonitoringSlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n\r\n dispatch(changeMachineMonitoringHeader(AppTitle.machineMonitoring.title));\r\n\r\n // 初回マウント時に施工機の一覧取得を行う。\r\n dispatch(\r\n onGetAsync({\r\n item: {\r\n type: MachineMonitoringSearchType.None,\r\n machineKeyword: \"\",\r\n siteKeyword: \"\",\r\n reportKeyword: \"\",\r\n }\r\n })\r\n );\r\n\r\n // unmout 時\r\n return () => {\r\n // タイマークリア\r\n dispatch(MachineMonitoringSlice.actions.stopReloadTimer());\r\n // 入力内容クリア\r\n dispatch(MachineMonitoringSlice.actions.clearInputItem());\r\n }\r\n\r\n }, [dispatch]);\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* メイン画面 */}\r\n \r\n }\r\n bottomContent={}\r\n />\r\n }\r\n // 検査結果\r\n main={}\r\n />\r\n \r\n\r\n\r\n {/* ダイアログ */}\r\n \r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport Container from '@material-ui/core/Container';\r\n\r\n/** ヘッダーページの Props を提供します。 */\r\ninterface Props {\r\n /** ヘッダーコンテンツを表します。 */\r\n header: React.ReactNode,\r\n}\r\n\r\n/**\r\n * ヘッダーページのレイアウトを表示します。\r\n * @param param0\r\n */\r\nexport const Layout: React.FC = (props) => {\r\n\r\n return (\r\n <>\r\n {/* ヘッダー */}\r\n <>\r\n {props.header}\r\n \r\n\r\n {/* メイン */}\r\n \r\n <>\r\n {props.children}\r\n \r\n \r\n\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Box } from '@material-ui/core'\r\n\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // コンテナ\r\n root: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n },\r\n // コンテナ\r\n container: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n // タイトル\r\n title: {\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n // メニュー\r\n group: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n hidden: {\r\n width: 200,\r\n visibility: \"hidden\",\r\n }\r\n }),\r\n);\r\n\r\n/** ヘッダーのレイアウトを表します。 */\r\ninterface Props {\r\n /** ロゴを表します。 */\r\n logo: React.ReactNode,\r\n /** 画面タイトルを表します。 */\r\n title: React.ReactNode,\r\n /** エラー情報を表します。 */\r\n errorPopover: React.ReactNode,\r\n /** メニューを表します。 */\r\n menu: React.ReactNode,\r\n}\r\n\r\n/**\r\n * ヘッダーのレイアウトを表します。\r\n * @param props\r\n */\r\nconst Layout: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {/* 左 ロゴ */}\r\n \r\n {props.logo}\r\n \r\n\r\n {/* 中央 */}\r\n \r\n {/*\r\n
\r\n */}\r\n \r\n {props.title}\r\n \r\n \r\n {props.errorPopover}\r\n \r\n
\r\n\r\n {/* 右 メニュー */}\r\n \r\n {props.menu}\r\n \r\n
\r\n
\r\n \r\n\r\n );\r\n}\r\nexport default Layout;\r\n","import * as React from 'react';\r\nimport clsx from \"clsx\";\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport { AppBar, Toolbar } from '@material-ui/core';\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n flexGrow: 1,\r\n },\r\n // ヘッダーバー\r\n appBar: {\r\n color: grey[800],// (\"#424242\")\r\n backgroundColor: \"#9bf9cc\",\r\n },\r\n // メニューボタン\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n // タイトル\r\n title: {\r\n fontSize: \"1.5rem\",\r\n minWidth: \"200px\",\r\n textAlign: \"center\",\r\n overflowWrap: \"break-word\",\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n // ロゴ\r\n logo: {\r\n height: \"45px\",\r\n margin: theme.spacing(1),\r\n },\r\n // エラー情報アリ\r\n error: {\r\n color: theme.palette.error.contrastText,\r\n backgroundColor: theme.palette.error.main,\r\n\r\n }\r\n }),\r\n);\r\n\r\n/** メニューバーの Props を表します。 */\r\ninterface Props {\r\n /** CTUエラー施工機情報を表示するか画面かどうかを表します。 */\r\n isShowCtuError: boolean,\r\n /** エラーがあるかどうかを表します。 */\r\n isCtuError: boolean,\r\n /** CTUエラー施工機があるかどうかを表します。 */\r\n isExistMachineError: boolean,\r\n}\r\n\r\n/**\r\n * メニューバーを表します。\r\n * */\r\nconst MenuBar: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n const isError = props.isShowCtuError ? props.isExistMachineError : props.isCtuError;\r\n\r\n return (\r\n <>\r\n \r\n \r\n\r\n {props.children}\r\n\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport default MenuBar;\r\n","import * as React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { PageType } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport MenuBar from './MenuBar'\r\n/**\r\n * メニューバーを表します。\r\n * */\r\nexport const MenuBarContainer: React.FC<{}> = (props) => {\r\n\r\n const isError = useSelector((state: RootState) => state.globalHeader.isError);\r\n const isExistMachineError = useSelector((state: RootState) => state.globalHeader.ctuErrorMachine.isExistMachineError);\r\n const pageType: PageType = useSelector((state: RootState) => state.globalHeader.pageType);\r\n\r\n /**\r\n * エラーポップアップボタンを表示する画面かどうかを判定します。\r\n * @param type\r\n */\r\n const isShowCtuError = (type: PageType) => {\r\n let result = false;\r\n switch (type) {\r\n case PageType.Home:\r\n case PageType.Master:\r\n case PageType.Report:\r\n result = true;\r\n break;\r\n case PageType.Record:\r\n result = false;\r\n break;\r\n default:\r\n result = false;\r\n }\r\n return result;\r\n }\r\n\r\n return (\r\n \r\n\r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/FudoLogo.95279334.png\";","export default __webpack_public_path__ + \"static/media/STLogo.fb7d3827.png\";","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Box } from '@material-ui/core';\r\nimport FudoLog from '../../../../../assets/FudoLogo.png';\r\nimport STLogo from '../../../../../assets/STLogo.png';\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ロゴ\r\n logo: {\r\n height: \"45px\",\r\n margin: theme.spacing(1),\r\n },\r\n }),\r\n);\r\n\r\n/** ロゴを表示します。 */\r\nconst Logo: React.FC<{}> = () => {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n < Box display=\"flex\" >\r\n \"LogoFudo\"\r\n \"LogoST\"\r\n \r\n );\r\n}\r\n\r\nexport default Logo;\r\n","import * as React from 'react';\r\nimport { MachineType, Machine } from '../../../../../_types';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Typography, Box } from '@material-ui/core';\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n fontSize: \"1.5rem\",\r\n minWidth: \"200px\",\r\n textAlign: \"center\",\r\n overflowWrap: \"break-word\",\r\n },\r\n }),\r\n);\r\n\r\n/** タイトルの Props を表します。 */\r\ninterface Props {\r\n /** 画面タイトルを表します。*/\r\n title: string\r\n /** 施工機情報を表します。 */\r\n machine?: Machine\r\n /** 施工機情報を表示するかどうかを表します。 */\r\n isShowMachine: boolean\r\n}\r\n\r\n/** タイトルを表示します。 */\r\nconst Title: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n /**\r\n * 施工機情報を表示します。\r\n * @param machine\r\n */\r\n const renderMachine = (machine: Machine, title: string) => {\r\n let typeName = \"\";\r\n\r\n switch (machine.type) {\r\n case MachineType.BaseMachine:\r\n typeName = \"ベースマシン\";\r\n break;\r\n case MachineType.Auger:\r\n typeName = \"オーガー\";\r\n break;\r\n case MachineType.Lift:\r\n typeName = \"昇降装置\";\r\n break;\r\n }\r\n // レンダー\r\n return (\r\n <>\r\n {/* 施工機種別 */}\r\n \r\n {typeName}\r\n \r\n {/* 画面タイトル */}\r\n \r\n {title}\r\n \r\n {/* 社番 */}\r\n \r\n 【{machine.item.id}】\r\n \r\n {/* メーカー / 型式 */}\r\n \r\n {`[${machine.item.manufacturer} / ${machine.item.model}]`}\r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {(props.machine && props.isShowMachine) // 施工機情報を表示するかどうか\r\n ? (\r\n <>\r\n {/* 画面タイトル & 施工機情報を表示 */}\r\n {renderMachine(props.machine, props.title)}\r\n \r\n )\r\n : (\r\n <>\r\n {/* 画面タイトルのみ表示 */}\r\n \r\n {props.title}\r\n \r\n\r\n \r\n )\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default Title;\r\n","import * as React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { PageType } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport Title from './Title';\r\n\r\n/** タイトルを表示します。*/\r\nexport const TitleContainer: React.FC<{}> = () => {\r\n\r\n // Global State\r\n const title = useSelector((state: RootState) => state.globalHeader.title);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const pageType: PageType = useSelector((state: RootState) => state.globalHeader.pageType);\r\n\r\n /**\r\n * 施工機情報を表示する画面かどうかを判定します。\r\n * @param type\r\n */\r\n const isShowMachine = (type: PageType) => {\r\n let result = false;\r\n switch (type) {\r\n case PageType.Home:\r\n case PageType.Master:\r\n case PageType.Report:\r\n result = false;\r\n break;\r\n case PageType.Record:\r\n result = true;\r\n break;\r\n default:\r\n result = false;\r\n }\r\n return result;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n","/**\r\n * テーマ 関連の ユーティリティ機能を提供します。\r\n * */\r\nexport class ThemeSliceUtility {\r\n\r\n //#region フィールド\r\n\r\n /** ストレージのテーマの Key を表します。*/\r\n static readonly KeyTheme = \"Theme\";\r\n\r\n //#endregion フィールド\r\n\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * ストレージ にあるテーマ情報を取得します。\r\n * @returns テーマ情報を返します。\r\n * */\r\n public static getStorageTheme(): boolean {\r\n\r\n const data = localStorage.getItem(ThemeSliceUtility.KeyTheme) ?? \"\";\r\n\r\n const result = (Number.parseInt(data, 10) === 1);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * ストレージにテーマ情報を設定します。\r\n * @param value テーマ情報を指定します。\r\n */\r\n public static setStorageTheme(value: boolean): void {\r\n\r\n localStorage.setItem(ThemeSliceUtility.KeyTheme, value ? \"1\" : \"0\");\r\n }\r\n\r\n //#endregion メソッド\r\n\r\n}\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { Dispatch } from 'redux';\r\nimport { ThemeSliceUtility } from './theme-slice-utility';\r\n\r\n/** テーマ選択の State を提供します。 */\r\ninterface State {\r\n /** ダークモードかどうかを表します。 */\r\n isDark: boolean,\r\n}\r\n\r\n/** State の初期値を設定します。 */\r\nconst initialState: State = {\r\n isDark: ThemeSliceUtility.getStorageTheme(),\r\n}\r\n\r\n/** テーマ Slice を 提供します。*/\r\nexport const themeSlice = createSlice({\r\n name: 'theme',  // createSlice を識別するための名前\r\n initialState, // State の初期値を入れる\r\n reducers: { // State の変更処理\r\n\r\n /**\r\n * テーマを変更します。\r\n * @param state\r\n * @param action\r\n */\r\n setTheme: (state: State, action: PayloadAction) => {\r\n state.isDark = action.payload;\r\n },\r\n },\r\n})\r\n\r\n/**\r\n * テーマを変更します。\r\n * @param isDark\r\n */\r\nexport function changeDarkTheme(isDark: boolean) {\r\n return (dispatch: Dispatch) => {\r\n // ストレージ更新\r\n ThemeSliceUtility.setStorageTheme(isDark);\r\n\r\n // store 更新\r\n dispatch(themeSlice.actions.setTheme(isDark));\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport Brightness7Icon from '@material-ui/icons/Brightness7';\r\nimport Brightness4Icon from '@material-ui/icons/Brightness4';\r\nimport { MenuItem, Box } from '@material-ui/core';\r\n\r\n/** ダークモードトグルボタンの Props を表します。 */\r\ninterface Props {\r\n /** ダークモードかどうかを表します。 */\r\n isDark: boolean\r\n /** ダークモードON処理を表します。 */\r\n onClickDarkThemeOn: () => void,\r\n /** ダークモードOFF処理を表します。 */\r\n onClickDarkThemeOff: () => void,\r\n}\r\n\r\n/**\r\n * ダークモードトグルボタン\r\n * @param param0\r\n */\r\nexport const ThemeToggleButton: React.FC = (props) => {\r\n\r\n return (\r\n <>\r\n {props.isDark\r\n ? (\r\n // ダークモード\r\n \r\n \r\n ダークモード\r\n \r\n )\r\n : (\r\n\r\n // デフォルトモード\r\n \r\n \r\n ライトモード\r\n \r\n )}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../rootReducer';\r\nimport { changeDarkTheme } from '../../modules/slice/theme/theme-slice';\r\nimport { ThemeToggleButton } from './ThemeToggleButton';\r\n\r\n/**\r\n * ダークモードトグルボタンを表示します。\r\n * @param param0\r\n */\r\nexport const ThemeToggleButtonContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isDark = useSelector((state: RootState) => state.theme.isDark);\r\n\r\n /** ダークモードON処理を行います。 */\r\n const onClickDarkThemeOn = () => dispatch(changeDarkTheme(true));\r\n\r\n /** ダークモードOFF処理を行います。 */\r\n const onClickDarkThemeOff = () => dispatch(changeDarkTheme(false));\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport { AppTitle } from '../../../app-title';\r\nimport { AppUrl } from '../../../app-url';\r\nimport { Tooltip, IconButton, Menu as MuiMenu, MenuItem, Button, Box } from '@material-ui/core';\r\nimport { HomeOutlined, ListAltOutlined, SettingsOutlined, AccountCircleOutlined, CloudUpload } from '@material-ui/icons';\r\nimport { ThemeToggleButtonContainer } from '../../../../../components/ThemeToggleButton/ThemeToggleButtonContainer';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // アイコンリスト\r\n menuIcon: {\r\n [theme.breakpoints.down('sm')]: {\r\n display: \"none\",\r\n },\r\n },\r\n // メニューアイテム\r\n menuItem: {\r\n // ホバー時\r\n \"&:hover\": {\r\n backgroundColor: fade(theme.palette.primary.main, 0.3),\r\n color: theme.palette.text.primary,\r\n\r\n },\r\n // 選択項目\r\n \"&.Mui-selected, &.Mui-selected:hover\": {\r\n backgroundColor: fade(theme.palette.primary.main, 0.8),\r\n color: theme.palette.primary.contrastText,\r\n },\r\n },\r\n }),\r\n);\r\n\r\n/** メニューの Props を表示します。 */\r\ninterface Props {\r\n /** 現在のパスを表します。*/\r\n locatedPath: string,\r\n /** ホームアイコン押下時のイベント処理を表します。 */\r\n onHomeClick: () => void,\r\n /** レポートアイコン押下時のイベント処理を表します。 */\r\n onReportClick: () => void,\r\n /** アップロードアイコン押下時のイベント処理を表します。 */\r\n onUploadClick: () => void,\r\n /** マスタ系メニューアイテム押下時のイベント処理を表します。 */\r\n onMasterItemClick: (path: string) => void,\r\n /** メニューアイテム押下時のイベント処理を表します。 */\r\n onSingoutClick: () => void,\r\n /** ログインユーザー名を表します。 */\r\n userName: string,\r\n}\r\n\r\n/** メニューの State を表示します。 */\r\ninterface State {\r\n /** マスタアイコンのアンカーを表します。 */\r\n anchorElMaster: null | HTMLElement;\r\n /** ユーザーアイコンのアンカーを表します。 */\r\n anchorElUser: null | HTMLElement;\r\n}\r\n\r\n/** メニューを表示します。 */\r\nconst IconMenu: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n // State\r\n const [values, setValues] = useState(\r\n {\r\n anchorElMaster: null,\r\n anchorElUser: null,\r\n });\r\n\r\n /** クローズ処理を行います。 */\r\n const handleClose = () => {\r\n setValues({\r\n anchorElMaster: null,\r\n anchorElUser: null,\r\n });\r\n };\r\n\r\n /**\r\n * ホームアイコン押下時のイベント処理を表します。\r\n * @param event\r\n */\r\n const onHomeClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n // 遷移\r\n props.onHomeClick();\r\n }\r\n\r\n /**\r\n * レポートアイコン押下時のイベント処理を表します。\r\n * @param event\r\n */\r\n const onReportClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n // 遷移\r\n props.onReportClick();\r\n }\r\n\r\n /**\r\n * アップロードアイコン押下時のイベント処理を表します。\r\n * @param event\r\n */\r\n const onUploadClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n // 遷移\r\n props.onUploadClick();\r\n }\r\n\r\n\r\n /**\r\n * マスタアイコン クリック時のイベント処理を行います。\r\n * @param event\r\n */\r\n const onMasterClick = (event: React.MouseEvent) => {\r\n setValues({ ...values, anchorElMaster: event.currentTarget });\r\n };\r\n\r\n /**\r\n * ユーザーアイコン クリック時のイベント処理を行います。\r\n * @param event\r\n */\r\n const onUserClick = (event: React.MouseEvent) => {\r\n setValues({ ...values, anchorElUser: event.currentTarget });\r\n };\r\n\r\n /**\r\n * マスタ系各項目 クリック時のイベント処理を行います。\r\n * @param path\r\n */\r\n const onMasterItemClick = (event: React.MouseEvent, path: string) => {\r\n event.preventDefault();\r\n\r\n // メニュークローズ\r\n handleClose();\r\n\r\n // 遷移\r\n props.onMasterItemClick(path);\r\n }\r\n\r\n /**\r\n * サインアウト クリック時のイベント処理を行います。\r\n * @param event\r\n */\r\n const onSingoutClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n // メニュークローズ\r\n handleClose();\r\n\r\n // 遷移\r\n props.onSingoutClick();\r\n }\r\n\r\n return (\r\n <>\r\n {/* メニューアイコンボタン */}\r\n
\r\n\r\n {/* Home アイコン (施工機モニター) */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Report アイコン (その他報告) */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Upload アイコン (ファイルアップロード) */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Setting アイコン (マスタ系) */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* User アイコン (サインアウト) */}\r\n \r\n \r\n \r\n {props.userName}\r\n\r\n \r\n \r\n\r\n\r\n {/* Master系 リスト */}\r\n \r\n {/* 施工機マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMachine.path)}\r\n >\r\n {AppTitle.masterMachine.title}\r\n \r\n {/* 型式マスタ */}\r\n onMasterItemClick(e, AppUrl.masterModel.path)}\r\n >\r\n {AppTitle.masterModel.title}\r\n \r\n {/* メーカーマスタ */}\r\n onMasterItemClick(e, AppUrl.masterManufacturer.path)}\r\n >\r\n {AppTitle.masterManufacturer.title}\r\n \r\n {/* 工法マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMethod.path)}\r\n >\r\n {AppTitle.masterMethod.title}\r\n \r\n {/* 整備区分マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMaintenanceDivisioin.path)}\r\n >\r\n {AppTitle.masterMaintenanceDivisioin.title}\r\n \r\n {/* 整備項目マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMaintenanceItem.path)}\r\n >\r\n {AppTitle.masterMaintenanceItem.title}\r\n \r\n {/* 特記事項マスタ */}\r\n onMasterItemClick(e, AppUrl.masterRemarks.path)}\r\n >\r\n {AppTitle.masterRemarks.title}\r\n \r\n {/* 点検区分マスタ */}\r\n onMasterItemClick(e, AppUrl.masterInspectionDivision.path)}\r\n >\r\n {AppTitle.masterInspectionDivision.title}\r\n \r\n {/* 点検項目マスタ */}\r\n onMasterItemClick(e, AppUrl.masterInspectionItem.path)}\r\n >\r\n {AppTitle.masterInspectionItem.title}\r\n \r\n {/* ユーザーマスタ */}\r\n onMasterItemClick(e, AppUrl.masterUser.path)}\r\n >\r\n {AppTitle.masterUser.title}\r\n \r\n \r\n\r\n {/* User系 リスト */}\r\n \r\n \r\n サインアウト\r\n \r\n\r\n {/* テーマカラー */}\r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n \r\n );\r\n}\r\nexport default IconMenu;\r\n","import * as React from 'react';\r\nimport Brightness7Icon from '@material-ui/icons/Brightness7';\r\nimport Brightness4Icon from '@material-ui/icons/Brightness4';\r\nimport { ListItem, ListItemText, ListItemIcon, Box } from '@material-ui/core';\r\n\r\n/** ダークモードトグルボタンの Props を表します。 */\r\ninterface Props {\r\n /** ダークモードかどうかを表します。 */\r\n isDark: boolean\r\n /** ダークモードON処理を表します。 */\r\n onClickDarkThemeOn: () => void,\r\n /** ダークモードOFF処理を表します。 */\r\n onClickDarkThemeOff: () => void,\r\n}\r\n\r\n/**\r\n * ダークモードトグルボタン\r\n * @param param0\r\n */\r\nexport const ThemeToggleListItemButton: React.FC = (props) => {\r\n\r\n return (\r\n props.isDark\r\n ? (\r\n // ダークモード\r\n \r\n \r\n ダークモード\r\n } />\r\n \r\n )\r\n : (\r\n // デフォルトモード\r\n \r\n \r\n ライトモード\r\n \r\n } />\r\n \r\n )\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../rootReducer';\r\nimport { changeDarkTheme } from '../../modules/slice/theme/theme-slice';\r\nimport { ThemeToggleListItemButton } from './ThemeToggleListItemButton';\r\n\r\n/**\r\n * ダークモードトグルボタンを表示します。\r\n * @param param0\r\n */\r\nexport const ThemeToggleListItemButtonContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isDark = useSelector((state: RootState) => state.theme.isDark);\r\n\r\n /** ダークモードON処理を行います。 */\r\n const onClickDarkThemeOn = () => dispatch(changeDarkTheme(true));\r\n\r\n /** ダークモードOFF処理を行います。 */\r\n const onClickDarkThemeOff = () => dispatch(changeDarkTheme(false));\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport clsx from \"clsx\";\r\nimport { AppTitle } from '../../../app-title';\r\nimport { AppUrl } from '../../../app-url';\r\nimport { IconButton, Divider, Drawer, List, ListItem, ListItemIcon, ListItemText, Collapse, Box } from '@material-ui/core';\r\nimport { Menu, HomeOutlined, ListAltOutlined, SettingsOutlined, AccountCircleOutlined, ExpandLess, ExpandMore, CloudUpload } from '@material-ui/icons';\r\nimport { ThemeToggleListItemButtonContainer } from '../../../../../components/ThemeToggleButton/ThemeToggleListItemButtonContainer';\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n //ドロワーメニュー\r\n drawerIcon: {\r\n [theme.breakpoints.up('md')]: {\r\n display: \"none\",\r\n },\r\n },\r\n // メニューアイテム\r\n menuItem: {\r\n // ホバー時\r\n \"&:hover\": {\r\n backgroundColor: fade(theme.palette.primary.main, 0.3),\r\n color: theme.palette.text.primary,\r\n\r\n },\r\n // 選択項目\r\n \"&.Mui-selected, &.Mui-selected:hover\": {\r\n backgroundColor: fade(theme.palette.primary.main, 0.8),\r\n color: theme.palette.primary.contrastText,\r\n },\r\n },\r\n // リスト\r\n list: {\r\n width: 250,\r\n },\r\n }),\r\n);\r\n\r\n/** ドロワーメニューの Props を表示します。 */\r\ninterface Props {\r\n /** 現在のパスを表します。*/\r\n locatedPath: string,\r\n /** ホームアイコン押下時のイベント処理を表します。 */\r\n onHomeClick: () => void,\r\n /** レポートアイコン押下時のイベント処理を表します。 */\r\n onReportClick: () => void,\r\n /** アップロードアイコン押下時のイベント処理を表します。 */\r\n onUploadClick: () => void,\r\n /** マスタ系メニューアイテム押下時のイベント処理を表します。 */\r\n onMasterItemClick: (path: string) => void,\r\n /** メニューアイテム押下時のイベント処理を表します。 */\r\n onSingoutClick: () => void,\r\n /** ログインユーザー名を表します。 */\r\n userName: string,\r\n}\r\n\r\n/** ドロワーメニュー State */\r\ninterface State {\r\n /** ドロワーを表示しているかどうかを表します。 */\r\n showDrawer: boolean;\r\n /** マスタリストを展開表示しているかどうかを表します。 */\r\n masterCollpase: boolean,\r\n /** ユーザーリストを展開表示しているかどうかを表します。 */\r\n userCollpase: boolean,\r\n}\r\n\r\n/** メニューを表示します。 */\r\nconst DrawerMenu: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n //State\r\n const [values, setValues] = useState(\r\n {\r\n showDrawer: false,\r\n masterCollpase: false,\r\n userCollpase: false,\r\n });\r\n\r\n /* ドロワーを表示します。 */\r\n const openDrawer = () => {\r\n setValues({\r\n ...values,\r\n showDrawer: true,\r\n });\r\n }\r\n\r\n /** ドロワーを非表示にします。 */\r\n const cloaseDrawer = () => {\r\n setValues({\r\n ...values,\r\n showDrawer: false,\r\n });\r\n }\r\n\r\n /** マスターメニューリストの展開表示切り替え処理を行います。 */\r\n const toggleMasterCallpase = () => {\r\n setValues({\r\n ...values,\r\n masterCollpase: !values.masterCollpase,\r\n });\r\n };\r\n\r\n /** ユーザーメニューリストの展開表示切り替え処理を行います。 */\r\n const toggleUserCallpase = () => {\r\n setValues({\r\n ...values,\r\n userCollpase: !values.userCollpase,\r\n });\r\n };\r\n\r\n /**\r\n * ボタンクリック時のイベントを処理します。\r\n * @param event\r\n */\r\n const onButtonClickBase = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n // ドロワークローズ\r\n cloaseDrawer();\r\n }\r\n\r\n\r\n /**\r\n * ホームアイコン クリック時のイベント処理を表します。\r\n * @param event\r\n */\r\n const onHomeClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n // ドロワークローズ\r\n cloaseDrawer();\r\n\r\n // 遷移\r\n props.onHomeClick();\r\n }\r\n\r\n /**\r\n * レポートアイコン クリック時のイベント処理を表します。\r\n * @param event\r\n */\r\n const onReportClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n // ドロワークローズ\r\n cloaseDrawer();\r\n\r\n // 遷移\r\n props.onReportClick();\r\n }\r\n\r\n /**\r\n * アップロードアイコン クリック時のイベント処理を表します。\r\n * @param event\r\n */\r\n const onUploadClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n // 遷移\r\n props.onUploadClick();\r\n }\r\n\r\n /**\r\n * マスタ系各項目 クリック時のイベント処理を行います。\r\n * @param path\r\n */\r\n const onMasterItemClick = (event: React.MouseEvent, path: string) => {\r\n event.preventDefault();\r\n\r\n // ドロワークローズ\r\n cloaseDrawer();\r\n\r\n // 遷移\r\n props.onMasterItemClick(path);\r\n }\r\n\r\n /**\r\n * サインアウト クリック時のイベント処理を行います。\r\n * @param event\r\n */\r\n const onSingoutClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n // ドロワークローズ\r\n cloaseDrawer();\r\n\r\n // 遷移\r\n props.onSingoutClick();\r\n }\r\n\r\n return (\r\n <>\r\n {/* Drawerボタン */}\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n {/* Drawer */}\r\n \r\n {/* メニューリスト */}\r\n \r\n {/* Home */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* Report */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* Upload */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* Master */}\r\n \r\n \r\n \r\n \r\n \r\n {values.masterCollpase ? : }\r\n \r\n \r\n \r\n\r\n {/* 施工機マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMachine.path)}\r\n >\r\n \r\n \r\n {/* 型式マスタ */}\r\n onMasterItemClick(e, AppUrl.masterModel.path)}\r\n >\r\n \r\n \r\n {/* メーカーマスタ */}\r\n onMasterItemClick(e, AppUrl.masterManufacturer.path)}\r\n >\r\n \r\n \r\n {/* 工法マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMethod.path)}\r\n >\r\n \r\n \r\n {/* 整備区分マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMaintenanceDivisioin.path)}\r\n >\r\n \r\n \r\n {/* 整備項目マスタ */}\r\n onMasterItemClick(e, AppUrl.masterMaintenanceItem.path)}\r\n >\r\n \r\n \r\n {/* 特記事項マスタ */}\r\n onMasterItemClick(e, AppUrl.masterRemarks.path)}\r\n >\r\n \r\n \r\n {/* 点検区分マスタ */}\r\n onMasterItemClick(e, AppUrl.masterInspectionDivision.path)}\r\n >\r\n \r\n \r\n {/* 点検項目マスタ */}\r\n onMasterItemClick(e, AppUrl.masterInspectionItem.path)}\r\n >\r\n \r\n \r\n {/* ユーザーマスタ */}\r\n onMasterItemClick(e, AppUrl.masterUser.path)}\r\n >\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n {/* User */}\r\n \r\n \r\n \r\n \r\n \r\n {values.userCollpase ? : }\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* テーマカラー */}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n );\r\n\r\n}\r\nexport default DrawerMenu;\r\n","// cookies\r\nimport * as Cookies from \"js-cookie\";\r\n\r\n/**\r\n * サインイン Slice 関連の ユーティリティ機能を提供します。\r\n * */\r\nexport class SigninUtility {\r\n\r\n /** ストレージのエリア種別の Key を表します。*/\r\n static readonly KeyIsSignedIn = \"lasted\";\r\n\r\n /**\r\n * ストレージ にある認証情報を取得します。\r\n * @returns 認証情報を返します。\r\n * */\r\n public static getStorageIsSignedIn(): boolean {\r\n\r\n const data = Cookies.get(SigninUtility.KeyIsSignedIn);\r\n\r\n return !!data;\r\n }\r\n\r\n /**\r\n * ストレージに認証情報を設定します。\r\n */\r\n public static setStorageIsSignedIn(): void {\r\n // Cookie セット\r\n Cookies.set(SigninUtility.KeyIsSignedIn, (new Date().getTime()).toString());\r\n }\r\n\r\n /**\r\n * ストレージに認証情報を設定します。\r\n */\r\n public static extendExpiresIsSignedIn(): void {\r\n // Cookie セット\r\n Cookies.set(SigninUtility.KeyIsSignedIn, (new Date().getTime()).toString());\r\n }\r\n\r\n /**\r\n * ストレージにある認証情報を削除します。\r\n * */\r\n public static removeStorageIsSignedIn(): void {\r\n // Cookie 削除\r\n Cookies.remove(SigninUtility.KeyIsSignedIn);\r\n }\r\n\r\n}\r\n","import { AccountClient, SignInInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { SignInRequest, SignInResult } from './types';\r\n\r\n/**\r\n * `Account` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class AccountAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new AccountAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * サインインします。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async signInAsync(parameter: SignInRequest): Promise {\r\n function createErrorResult(message?: string): SignInResult {\r\n return {\r\n errorMessage: message == null ? WebApiAdapter.messageFailedCommunication : message,\r\n };\r\n }\r\n try {\r\n // サインイン\r\n const input = new SignInInput();\r\n input.init({\r\n userId: parameter.userId,\r\n password: parameter.password,\r\n });\r\n const signInOutput = await this.client.signIn(input, void 0);\r\n if (signInOutput == null) {\r\n return createErrorResult();\r\n }\r\n else if (signInOutput.errorMessage != null) {\r\n return createErrorResult(signInOutput.errorMessage);\r\n }\r\n\r\n // トークン取得\r\n const tokenOutput = await this.client.getToken();\r\n if (tokenOutput == null) {\r\n return createErrorResult();\r\n }\r\n else if (tokenOutput.isError === true) {\r\n return createErrorResult(tokenOutput.errorMessage);\r\n }\r\n\r\n // トークン保存\r\n if (tokenOutput.token != null) {\r\n localStorage.setItem(AccountClient.antiForgeryLocalStorageKey, tokenOutput.token);\r\n }\r\n\r\n // 正常\r\n const result: SignInResult = {\r\n returnUrl: signInOutput.returnUrl\r\n };\r\n return result;\r\n }\r\n catch {\r\n return createErrorResult();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * サインアウトします。\r\n * */\r\n public async signOutAsync(): Promise {\r\n // async/await対応\r\n return new Promise((resolve, reject) => {\r\n // トークン削除\r\n localStorage.removeItem(AccountClient.antiForgeryLocalStorageKey);\r\n resolve();\r\n });\r\n }\r\n\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new AccountClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { Dispatch } from 'redux';\r\nimport { UserItem } from '../../../_types';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter'\r\nimport { SigninUtility } from '../signin/signin-slice-utility';\r\nimport { AppUrl } from '../../../pages/Shared/app-url';\r\nimport { AccountAdapter } from '../../adapter/account/account-adapter';\r\n\r\n\r\n/** 認証 Store の State を提供します。 */\r\ninterface State {\r\n /** ユーザーを表します。 */\r\n user?: UserItem,\r\n /** 認証通信が完了したかどうかを表します。 */\r\n isLoaded: boolean,\r\n /** エラーかどうかを表します。 */\r\n isError: boolean,\r\n /** メッセージを表します。 */\r\n message?: string\r\n}\r\n\r\n/** State の初期値を設定します。 */\r\nconst initialState: State = {\r\n isLoaded: false,\r\n isError: false,\r\n}\r\n\r\n/** 認証 Slice を 提供します。*/\r\nexport const AuthenticationSlice = createSlice({\r\n name: 'Authentication', // createSlice を識別するための名前\r\n initialState, // State の初期値を入れる\r\n reducers: { // State の変更処理\r\n\r\n /**\r\n * 認証済みユーザー情報を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n setUser(state: State, action: PayloadAction) {\r\n state.user = action.payload;\r\n },\r\n\r\n /**\r\n * 認証済みユーザー情報を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n clearUser(state: State) {\r\n state.user = void 0;\r\n },\r\n\r\n /**\r\n * 認証開始状態を表します。\r\n * @param state\r\n */\r\n startAuthentication(state: State) {\r\n state.user = void 0;\r\n state.isError = false;\r\n state.message = void 0;\r\n },\r\n\r\n /**\r\n * 認証失敗状態を表します。\r\n * @param state\r\n * @param action\r\n */\r\n errorAuthentication(state: State, action: PayloadAction) {\r\n state.user = void 0;\r\n state.isError = true;\r\n state.message = `${action.payload ?? \"認証済みユーザー情報の取得に失敗しました\"}`\r\n },\r\n\r\n /**\r\n * 認証終了状態を表します。\r\n * @param state\r\n */\r\n endAuthentication(state: State) {\r\n state.isLoaded = true;\r\n },\r\n\r\n /** 【サインアウト】Redux Store をクリアします。 */\r\n userSignOut() {\r\n // ここでの処理は無し\r\n // rootReducer.ts にて、Authentication/userSignOut アクションで Store をクリアする。\r\n }\r\n\r\n }\r\n})\r\n/**\r\n * 認証済みユーザー情報を取得します。\r\n *\r\n */\r\nexport const onGetAuthenticatedUserAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(AuthenticationSlice.actions.startAuthentication());\r\n\r\n // 通信処理\r\n const result = await SharedAdapter.instance.getAuthenticatedUserAsync();\r\n\r\n if (!result || !result.user || result.isError) {\r\n\r\n // 異常\r\n dispatch(AuthenticationSlice.actions.errorAuthentication(result.errorMessage ?? \"\"));\r\n\r\n } else {\r\n // 正常\r\n // ストレージ更新\r\n SigninUtility.setStorageIsSignedIn();\r\n\r\n // store 更新\r\n dispatch(AuthenticationSlice.actions.setUser(result.user))\r\n\r\n }\r\n\r\n } catch (error) {\r\n // 例外\r\n dispatch(AuthenticationSlice.actions.errorAuthentication(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(AuthenticationSlice.actions.endAuthentication());\r\n }\r\n\r\n}\r\n\r\n/**\r\n * サインアウト処理を行います。\r\n * */\r\nexport const onSignOutAsync = () => async (dispatch: Dispatch) => {\r\n\r\n // ストレージ更新\r\n SigninUtility.removeStorageIsSignedIn();\r\n\r\n // サインアウト処理\r\n await AccountAdapter.instance.signOutAsync();\r\n\r\n // store リセット\r\n //await dispatch(AuthenticationSlice.actions.userSignOut());\r\n\r\n window.location.href = \"/signin\";\r\n}\r\n","import { AreaType, MachineType, KeyValueItem } from \"../../../../_types\";\r\nimport { InspectedStampItem, ReportItem } from \"../../_types\";\r\n\r\n/** 整備記録テーブル項目のインターフェイスを提供します。 */\r\nexport interface MaintenanceRecordListItem {\r\n /** 記録表番号 を表します。 */\r\n readonly no: string;\r\n /** 完了日時を表します。 */\r\n readonly completionDate: string;\r\n /** 工法を表します。 */\r\n readonly constructionMethod: string;\r\n /** 作業者を表します。 */\r\n readonly worker: string;\r\n /** エリアを表します。 */\r\n readonly area: string;\r\n /** エリア種別を表します。*/\r\n readonly areaType: AreaType;\r\n /** 作業場所を表します。 */\r\n readonly site: string;\r\n /** 報告事項を表します。*/\r\n readonly report: string;\r\n /** 検印済みかどうかを表します。*/\r\n readonly isStamped: boolean;\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum MaintenanceRecordSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 場所を表します。 */\r\n Place = 1,\r\n /** 作業者を表します。 */\r\n Worker = 2,\r\n /** 報告事項を表します。 */\r\n Report = 3,\r\n}\r\n\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum StampSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 検印済を表します。 */\r\n Done = 1,\r\n /** 未検印を表します。 */\r\n NotYet = 2,\r\n}\r\n\r\n/**\r\n * 整備記録画面の入力項目のインターフェイスを提供します。\r\n */\r\nexport interface MaintenanceRecordInputItem {\r\n /** 社番を表します。 */\r\n machineId: string;\r\n /** 機器種別を表します。 */\r\n machineType: MachineType;\r\n /** キーワードを表します。 */\r\n keyword?: string;\r\n /** 検索種別を表します。 */\r\n searchType: MaintenanceRecordSearchType;\r\n /** 検印検索種別を表します。 */\r\n searchStampType: StampSearchType;\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n}\r\n\r\n/**\r\n * 帳票情報のインターフェイスを提供します。\r\n * */\r\nexport interface MaintenanceReportItem extends ReportItem {\r\n /** 検印情報を表します。 */\r\n stampItems: KeyValueItem[]\r\n}\r\n","import * as React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport IconMenu from './IconMenu';\r\nimport DrawerMenu from './DrawerManu';\r\nimport { AppUrl } from '../../../app-url';\r\nimport { onSignOutAsync } from '../../../../../modules/slice/authentication/authentication-slice';\r\n\r\n\r\n/** メニューを表示します。 */\r\nexport const MenuContainer: React.FC<{}> = () => {\r\n\r\n /** Location を表します。*/\r\n const location = useLocation();\r\n\r\n /** History を表します。 */\r\n const history = useHistory();\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const userName = useSelector((state: RootState) => state.authentication.user?.name ?? \"\");\r\n\r\n /**\r\n * 画面遷移処理を行います。\r\n * @param path\r\n */\r\n const onNavigate = (path: string) => {\r\n // 遷移\r\n history.push(path);\r\n }\r\n\r\n /** ホーム クリック時のイベント処理を行います。 */\r\n const onHomeClick = () => {\r\n onNavigate(AppUrl.machineMonitoring.path);\r\n }\r\n\r\n /** レポート クリック時のイベント処理を行います。 */\r\n const onReportClick = () => {\r\n onNavigate(AppUrl.otherReport.path);\r\n }\r\n\r\n /** アップロード クリック時のイベント処理を行います。 */\r\n const onUploadClick = () => {\r\n onNavigate(AppUrl.fileManage.path);\r\n }\r\n\r\n /** マスタ系各項目のクリック時のイベント処理を行います。 */\r\n const onMasterItemClick = (path: string) => {\r\n onNavigate(path);\r\n }\r\n\r\n /** サインアウト クリック時のイベント処理を行います。 */\r\n const onSingoutClickAsync = () => {\r\n //サインアウト処理\r\n dispatch(onSignOutAsync());\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n\r\n \r\n\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport { Button, Popover, Typography, Divider, Card, CardContent, CardActions, Box } from '@material-ui/core';\r\nimport WarningOutlinedIcon from '@material-ui/icons/WarningOutlined';\r\nimport NotificationsOffIcon from '@material-ui/icons/NotificationsOff';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // カード\r\n card: {\r\n minWidth: 300,\r\n },\r\n // カードコンテンツ\r\n cardContents: {\r\n maxHeight: 500,\r\n overflow: \"auto\",\r\n },\r\n // カードヘッダー\r\n header: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n padding: theme.spacing(2, 2, 1),\r\n },\r\n // エラーテキストボタン\r\n button: {\r\n fontSize: \"1.25rem\",\r\n borderWidth: 2,\r\n color: theme.palette.error.contrastText,\r\n borderColor: theme.palette.error.contrastText,\r\n },\r\n // エラーアイコン\r\n errorIcon: {\r\n fontSize: \"2rem!important\",\r\n },\r\n hidden: {\r\n width: 200,\r\n visibility: \"hidden\",\r\n }\r\n }),\r\n);\r\n\r\n/** エラーポップボタン の Props を提供します。 */\r\ninterface Props {\r\n /** エラーかどうかを表します。 */\r\n isExistMachineError: boolean,\r\n /** 社番を表します。 */\r\n machineIds: string[],\r\n /** リセットボタンクリック処理を表します。*/\r\n onRestClick: () => void,\r\n /** CTUエラー施工機情報を表示するか画面かどうかを表します。 */\r\n isShowCtuError: boolean,\r\n}\r\n\r\n/** エラーポップボタンを表示します。 */\r\nconst ErrorPopover: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? 'error-popover' : void 0;\r\n const isShow = props.isShowCtuError && props.isExistMachineError;\r\n\r\n /**\r\n * エラーボタンクリック処理を行います。\r\n * @param event\r\n */\r\n const onErrorClick = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n /** ポップオーバーのクローズ処理を行います。 */\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n /** リセットボタンクリック時の処理を行います。*/\r\n const onResetClick = () => {\r\n handleClose();\r\n props.onRestClick();\r\n };\r\n\r\n return (\r\n <>\r\n {isShow &&\r\n <>\r\n
\r\n }\r\n onClick={onErrorClick}\r\n >\r\n CTUエラー\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n エラー施工機\r\n \r\n }\r\n style={{ minWidth: 0 }}\r\n onClick={onResetClick}\r\n >\r\n 表示リセット\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n {props.machineIds.map((id, index) => (\r\n {id}\r\n ))}\r\n\r\n \r\n \r\n \r\n \r\n }\r\n \r\n )\r\n}\r\nexport default ErrorPopover;\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { onOpenDialog } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport { PageType } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport ErrorPopover from './ErrorPopover';\r\n\r\n/** エラーポップボタンを表示します。 */\r\nexport const ErrorPopoverContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // Global State\r\n const machineIds = useSelector((state: RootState) => state.globalHeader.ctuErrorMachine.errorMachineIds);\r\n const isExistMachineError = useSelector((state: RootState) => state.globalHeader.ctuErrorMachine.isExistMachineError);\r\n const pageType: PageType = useSelector((state: RootState) => state.globalHeader.pageType);\r\n\r\n /**\r\n * エラーポップアップボタンを表示する画面かどうかを判定します。\r\n * @param type\r\n */\r\n const isShowCtuError = (type: PageType) => {\r\n let result = false;\r\n switch (type) {\r\n case PageType.Home:\r\n case PageType.Master:\r\n case PageType.Report:\r\n result = true;\r\n break;\r\n case PageType.Record:\r\n result = false;\r\n break;\r\n default:\r\n result = false;\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /** 表示リセットボタンクリック時の処理を行います。 */\r\n const onResetClick = () => {\r\n\r\n dispatch(onOpenDialog());\r\n }\r\n\r\n return (\r\n \r\n )\r\n\r\n}\r\nexport default ErrorPopover;\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Box, Button, Dialog, DialogTitle, DialogActions, DialogContent, Typography, Divider } from '@material-ui/core';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport NotificationsOffIcon from '@material-ui/icons/NotificationsOff';\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ヘッダー\r\n header: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText\r\n },\r\n\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // コンテナ\r\n container: {\r\n backgroundColor: fade(theme.palette.secondary.main, 0.3),\r\n margin: theme.spacing(1),\r\n padding: theme.spacing(1),\r\n },\r\n\r\n // 施工機IdsBox\r\n machineBox: {\r\n overflowY: \"auto\",\r\n maxHeight: \"500px\",\r\n margin: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** リセットダイアログの Props を提供します。 */\r\ninterface Props {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** CTUエラー施工機社番を表します。 */\r\n machineIds: string[],\r\n /** リセットボタンクリック時の処理を表します。 */\r\n onResetClick: () => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n}\r\n\r\n\r\n/**\r\n * リセットダイアログを表示します。\r\n * @param props\r\n */\r\nconst ResetDialog: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n }, [props.isOpen])\r\n\r\n return (\r\n <>\r\n props.handleClose()}\r\n >\r\n\r\n {/* タイトル */}\r\n \r\n \r\n CTUエラー施工機表示リセット\r\n \r\n \r\n\r\n \r\n {/* message */}\r\n \r\n ヘッダーエラー表示をリセットします。よろしいですか?\r\n \r\n\r\n \r\n \r\n CTUエラー発生施工機 社番\r\n \r\n \r\n \r\n {props.machineIds.map((id, index) => (\r\n {id}\r\n ))}\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n props.handleClose()}\r\n />\r\n }\r\n className={classes.button}\r\n onClick={props.onResetClick}\r\n >\r\n 表示リセット\r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n \r\n );\r\n}\r\nexport default ResetDialog;\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { onReset, onCloseDialog } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport { PageType } from '../../../../../modules/slice/global-header/global-header-slice';\r\nimport ResetDialog from './ResetDialog';\r\n\r\n/**\r\n * リセットダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ResetDialogContainer: React.FC<{}> = () => {\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpenDialog = useSelector((state: RootState) => state.globalHeader.isOpenDialog);\r\n const machineIds = useSelector((state: RootState) => state.globalHeader.ctuErrorMachine.errorMachineIds);\r\n const pageType: PageType = useSelector((state: RootState) => state.globalHeader.pageType);\r\n const inputItem = useSelector((state: RootState) => state.machineMonitoring.item.inputItem);\r\n\r\n /**\r\n * リセットボタンクリック処理を行います。\r\n * */\r\n const onResetClick = () => {\r\n dispatch(onReset(pageType, { item: inputItem }));\r\n }\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n dispatch(onCloseDialog(pageType, { item: inputItem }));\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { useLocation, useHistory } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { HeaderMachineState } from './_types';\r\nimport { changeMachine } from '../../../modules/slice/global-header/global-header-slice';\r\nimport Layout from './components/Layout/Layout';\r\nimport { MenuBarContainer } from './components/MenuBar/MenuBarContainer';\r\nimport Logo from './components/Logo/Logo';\r\nimport { TitleContainer } from './components/Title/TitleContainer';\r\nimport { MenuContainer } from './components/Menu/MenuContainer';\r\nimport { ErrorPopoverContainer } from './components/ErrorPopover/ErrorPopoverContainer';\r\nimport { ResetDialogContainer } from './components/ResetDialog/ResetDialogContainer';\r\n\r\n/**\r\n * ヘッダーを表示します。\r\n * */\r\nexport const GlobalHeader: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n /** Hisotry を表します。*/\r\n const history = useHistory();\r\n /** 施工機種別 を表します。*/\r\n const machine = history.location.state;\r\n\r\n // 副作用\r\n useEffect(() => {\r\n\r\n if (machine) {\r\n dispatch(changeMachine(machine));\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n return (\r\n <>\r\n \r\n }\r\n title={}\r\n errorPopover={}\r\n menu={}\r\n />\r\n \r\n\r\n {/* リセットダイアログ */}\r\n \r\n\r\n \r\n\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { Layout } from './components/Layout/Layout';\r\nimport { GlobalHeader } from '../GlobalHeader/GlobalHeader';\r\n\r\n/**\r\n * 共通ヘッダーのあるページを表します。\r\n * @param param0\r\n */\r\nexport const HeaderPage: React.FC<{}> = ({ children }) => {\r\n\r\n return (\r\n }\r\n children={children}\r\n />\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { ConstructionMachineMonitoringPage } from './MainMonitor';\r\nimport { HeaderPage } from '../Shared/HeaderPage/HeaderPage';\r\n\r\n/**\r\n * 施工機モニター(Home)画面を表示します。\r\n */\r\nexport const ConstructionMachineMonitorPage: React.FC<{}> = () => {\r\n return (\r\n } />\r\n );\r\n}\r\n","import { createSlice, SliceCaseReducers, ValidateSliceCaseReducers, PayloadAction } from '@reduxjs/toolkit';\r\nimport { Message } from '../../../components/MuiSnackbar/types';\r\nimport { CreateSliceUtility } from './create-slice-utility'\r\nimport { ReportItem } from '../../../pages/ConstructionMachineMaster/_types';\r\n\r\n/** 記録表 の State を提供します。 */\r\nexport interface RecordsSliceState {\r\n /** テーブル項目の結果情報を表します。 */\r\n resultItems?: TList[],\r\n /** ロード中かどうかを表します。 */\r\n isLoading: boolean,\r\n /** メッセージを表示するかどうかを表します。 */\r\n isShowMessage: boolean,\r\n /** メッセージを表します。 */\r\n message?: Message,\r\n /** ビューワを表示するかどうか表します。 */\r\n isOpenViewer: boolean,\r\n /** 帳票情報を表します。 */\r\n report?: TReport,\r\n /** 選択された項目を表します。 */\r\n selectedItem?: TList,\r\n /** 帳票が更新されたかどうかを表します。 */\r\n isUpdated: boolean,\r\n /** 帳票が読み込まれたかどうかを表します。 */\r\n isReportLoading: boolean,\r\n}\r\n\r\n/**\r\n * slice オブジェクトを作成します。\r\n * @param name A string name for this slice of state. Generated action type constants will use this as a prefix.\r\n * @param initialState The initial state value for this slice of state.\r\n * @param reducers An object containing Redux \"case reducer\" functions (functions intended to handle a specific action type, equivalent to a single case statement in a switch).\r\n */\r\nexport const createReportListSlice = >>\r\n ({\r\n name = '',\r\n initialState,\r\n reducers\r\n }: {\r\n name: string\r\n initialState: RecordsSliceState\r\n reducers: ValidateSliceCaseReducers, Reducers>\r\n }) => {\r\n return createSlice({\r\n name,\r\n initialState,\r\n reducers: {\r\n\r\n /**\r\n * 通信開始処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchStart(state) {\r\n state.isLoading = true;\r\n state.isShowMessage = false;\r\n state.message = void 0;\r\n state.isUpdated = false;\r\n },\r\n\r\n /**\r\n * If you want to write to values of the state that depend on the generic\r\n * (in this case: `state.data`, which is T), you might need to specify the\r\n * State type manually here, as it defaults to `Draft>`,\r\n * which can sometimes be problematic with yet-unresolved generics.\r\n * This is a general problem when working with immer's Draft type and generics.\r\n */\r\n\r\n /**\r\n * テーブル項目を設定します。\r\n * @param state\r\n * @param action\r\n */\r\n setItems(state: RecordsSliceState, action: PayloadAction) {\r\n state.resultItems = action.payload;\r\n },\r\n\r\n /**\r\n * 帳票情報を設定します。\r\n * @param state\r\n * @param action\r\n */\r\n setReport(state: RecordsSliceState, action: PayloadAction) {\r\n state.report = action.payload;\r\n },\r\n\r\n /**\r\n * 帳票ビューワの表示状態を切り替えます。\r\n * @param state\r\n * @param action\r\n */\r\n clearReport(state: RecordsSliceState) {\r\n if (state.report != null) {\r\n state.report.reportUrl = \"\";\r\n }\r\n },\r\n\r\n /**\r\n * 通信失敗処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchFailure(state: RecordsSliceState) {\r\n state.resultItems = void 0;\r\n },\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n */\r\n fetchEnd(state: RecordsSliceState,) {\r\n state.isLoading = false;\r\n },\r\n\r\n /**\r\n * メッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showMessage(state: RecordsSliceState, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = action.payload;\r\n },\r\n\r\n /**\r\n * 通信成功時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showSuccessMessage(state: RecordsSliceState, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"success\",\r\n text: action.payload ?? CreateSliceUtility.DefualtSuccessMessage,\r\n }\r\n },\r\n\r\n /**\r\n * 通信失敗時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showErrorMessage(state: RecordsSliceState, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"error\",\r\n text: `Error : ${action.payload ?? CreateSliceUtility.DefualtErrorMessage}`,\r\n }\r\n },\r\n\r\n /**\r\n * メッセージの非表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n hideMessage(state: RecordsSliceState) {\r\n state.isShowMessage = false;\r\n },\r\n\r\n /**\r\n * 帳票ビューワの表示状態を切り替えます。\r\n * @param state\r\n * @param action\r\n */\r\n toggleViewre(state: RecordsSliceState, action: PayloadAction) {\r\n state.isOpenViewer = action.payload;\r\n },\r\n\r\n /**\r\n * 選択項目を取得します。\r\n * @param state\r\n * @param action\r\n */\r\n selectItem(state: RecordsSliceState, action: PayloadAction) {\r\n state.selectedItem = action.payload;\r\n },\r\n\r\n /**\r\n * 帳票ビューワの更新フラグを切り替えます。\r\n * @param state\r\n * @param action\r\n */\r\n changeUpdatedFlag(state: RecordsSliceState, action: PayloadAction) {\r\n state.isUpdated = action.payload;\r\n },\r\n\r\n /**\r\n * 帳票ビューワの読み込み完了フラグを切り替えます。\r\n * @param state\r\n * @param action\r\n */\r\n changeReportLoadingFlag(state: RecordsSliceState, action: PayloadAction) {\r\n state.isReportLoading = action.payload;\r\n },\r\n ...reducers\r\n }\r\n })\r\n}\r\n","import { MaintenanceRecordListItem, MaintenanceRecordSearchType, StampSearchType } from '../../../pages/ConstructionMachineMaster/MaintenanceRecord/_types';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\nimport { MaintenanceRecordItem, MaintenanceRecordSearchType as DtoSearchType, MachineType as DtoMachineType } from '../../swagger-clients';\r\n\r\n/**\r\n * `整備記録` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MaintenanceRecordUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: MaintenanceRecordItem[]): MaintenanceRecordListItem[] {\r\n const result: MaintenanceRecordListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const dateAt = source.maintenanceAt == null ? \"\" : SharedUtility.toDateString(new Date(source.maintenanceAt));\r\n const item: MaintenanceRecordListItem = {\r\n no: source.reportNo ?? \"\",\r\n completionDate: dateAt,\r\n constructionMethod: source.method ?? \"\",\r\n worker: source.worker ?? \"\",\r\n site: source.site ?? \"\",\r\n report: source.report ?? \"\",\r\n area: SharedUtility.toAreaText(source.areaId),\r\n areaType: SharedUtility.toAreaType(source.areaId),\r\n isStamped: source.isInspected,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検索キーワード種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSearchType(source: MaintenanceRecordSearchType): DtoSearchType {\r\n const result: DtoSearchType | undefined =\r\n source === MaintenanceRecordSearchType.None ? DtoSearchType.None :\r\n source === MaintenanceRecordSearchType.Place ? DtoSearchType.Site :\r\n source === MaintenanceRecordSearchType.Worker ? DtoSearchType.Worker :\r\n source === MaintenanceRecordSearchType.Report ? DtoSearchType.Report :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toSearchType\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印の検索種別を変換します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toisInspected(source: StampSearchType): boolean | undefined {\r\n const result: boolean | undefined =\r\n source === StampSearchType.Done ? true :\r\n source === StampSearchType.NotYet ? false :\r\n void 0;\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","/** 検印リストのインターフェイスを提供します。 */\r\nexport interface InspectedStampItem {\r\n /** 検印情報があるかないかを表します。 */\r\n readonly exist: boolean;\r\n /** 帳票No. を表します。 */\r\n readonly reportNo?: string;\r\n /** 検印された日付を表します。 */\r\n readonly reportAt?: string;\r\n /** 検印者を表します。 */\r\n readonly inspector?: string;\r\n /** 初検班長を表します。 */\r\n readonly firstTeamLeader?: string;\r\n /** 完検班長を表します。 */\r\n readonly completeTeamLeader?: string;\r\n /** 初検課長を表します。 */\r\n readonly firstManager?: string;\r\n /** 完検課長を表します。 */\r\n readonly completeManager?: string;\r\n /** 検印済みかどうかを表します。 */\r\n readonly isStamped?: boolean;\r\n}\r\n\r\n/** 検印更新ステータスを表します。 */\r\nexport enum StampUpdateStaus {\r\n /** 更新無しを表します。 */\r\n None = 0,\r\n /** 検印実行を表します。 */\r\n Stamp = 1,\r\n /** 差し戻しを表します。 */\r\n SendBack = 2,\r\n}\r\n\r\n/** 検印者種別を表す列挙値を提供します。 */\r\nexport enum InspecterType {\r\n /** 初検班長 */\r\n FirstTeamLeader = 1,\r\n /** 完検班長 */\r\n CompleteTeamLeader = 2,\r\n /** 初検課長 */\r\n FirstManager = 3,\r\n /** 完検課長 */\r\n CompleteManager = 4,\r\n}\r\n\r\n/** 検印情報の更新テーブルの項目のインターフェイスを提供します。 */\r\nexport interface UpdateInspectedStampListItem {\r\n /** キーを表します。 */\r\n readonly key: TKey,\r\n /** 帳票No.を表します。 */\r\n readonly reportNo?: string,\r\n /** 帳票日 を表します。 */\r\n readonly reportAt?: string,\r\n /** 検印者を表します。 */\r\n readonly inspector?: string;\r\n /** 項目名を表します。 */\r\n readonly data: string,\r\n /** 検印情報があるかどうかを表します。 */\r\n readonly exist: boolean,\r\n /** 更新前の検印状態を表します。 */\r\n readonly isStampBefore?: boolean,\r\n /** 更新後の検印状態を表します。 */\r\n readonly isStampAfter?: boolean,\r\n /** ステータスを表します。 */\r\n readonly status: StampUpdateStaus,\r\n}\r\n\r\n/** */\r\nexport interface ReportItem {\r\n /** 帳票のURLを表します。 */\r\n reportUrl: string,\r\n}\r\n","import { MaintenanceRecordClient, GetMaintenanceRecordInput, GetDocumentInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MaintenanceRecordGetRequest, MaintenanceRecordGetResult, MaintenanceRecordGetDocumentRequest, MaintenanceRecordGetDocumentResult } from './types';\r\nimport { MaintenanceRecordUtility } from './maintenance-record-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `整備記録` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MaintenanceRecordAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MaintenanceRecordAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: MaintenanceRecordGetRequest): Promise {\r\n function createErrorResult(message?: string): MaintenanceRecordGetResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetMaintenanceRecordInput();\r\n input.init({\r\n machineId: parameter.item.machineId,\r\n machineType: SharedUtility.fromMachineType(parameter.item.machineType),\r\n searchType: MaintenanceRecordUtility.toSearchType(parameter.item.searchType),\r\n searchWord: parameter.item.keyword,\r\n searchBeginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n searchEndAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n isInspected: MaintenanceRecordUtility.toisInspected(parameter.item.searchStampType),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceRecordGetResult = {\r\n isError: false,\r\n items: MaintenanceRecordUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MaintenanceRecordClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { GetMaintenanceReportInput, GetDailyReportInput, GetWeeklyReportInput, GetCompletionReportInput, InspectedStampItem as DtoInspectedStampItem, KeyValueItemOfDayOfWeekAndInspectedStampItem, KeyValueItemOfWeekOfMonthAndInspectedStampItem, GetMaintenancePreviewReportInput, UpdateMaintenanceInspectedStampInput, UpdateDailyInspectedStampInput, UpdateWeeklyInspectedStampInput, UpdateCompletionInspectedStampInput } from \"../../swagger-clients\";\r\nimport { MaintenanceReportRequest, DailyReportRequest, WeeklyReportRequest, CompletionReportRequest, UpdateMaintenanceReportRequest, UpdateDailyReportRequest, UpdateWeeklyReportRequest, UpdateCompletionReportRequest } from \"./type\";\r\nimport { SharedUtility } from \"../../shared/shared-utility\";\r\nimport { KeyValueItem, DayOfWeek, WeekOfMonth } from \"../../../_types\";\r\nimport { InspectedStampItem, InspecterType } from \"../../../pages/ConstructionMachineMaster/_types\";\r\n\r\n\r\n/**\r\n * `帳票` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class ReportUtility {\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetMaintenanceReportInput(source: MaintenanceReportRequest): GetMaintenanceReportInput {\r\n const result = new GetMaintenanceReportInput();\r\n result.init({\r\n machineType: SharedUtility.fromMachineType(source.machineType),\r\n machineId: source.machineId,\r\n reportNo: source.reportNo,\r\n reportAt: source.reportAt ? SharedUtility.toFormatDateString(new Date(source.reportAt)) : void 0,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetDailyReportInput(source: DailyReportRequest): GetDailyReportInput {\r\n const result = new GetDailyReportInput();\r\n result.init({\r\n machineId: source.machineId,\r\n reportAt: source.reportAt ? SharedUtility.toFormatDateString(new Date(source.reportAt)) : void 0,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetWeeklyReportInput(source: WeeklyReportRequest): GetWeeklyReportInput {\r\n const result = new GetWeeklyReportInput();\r\n result.init({\r\n machineId: source.machineId,\r\n reportAt: source.reportAt ? SharedUtility.toFormatDateString(new Date(source.reportAt)) : void 0,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetCompletionReportInput(source: CompletionReportRequest): GetCompletionReportInput {\r\n const result = new GetCompletionReportInput();\r\n result.init({\r\n machineId: source.machineId,\r\n reportAt: source.reportAt ? SharedUtility.toFormatDateString(new Date(source.reportAt)) : void 0,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetMaintenancePreviewReportInput(source: MaintenanceReportRequest): GetMaintenancePreviewReportInput {\r\n const result = new GetMaintenancePreviewReportInput();\r\n result.init({\r\n machineType: SharedUtility.fromMachineType(source.machineType),\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n private static toDtoInspectedStampItem(source: InspectedStampItem): DtoInspectedStampItem {\r\n if (source.reportNo == null) {\r\n throw new Error(\"toDtoInspectedStampItem\");\r\n }\r\n const result = new DtoInspectedStampItem();\r\n result.init({\r\n reportNo: source.reportNo,\r\n // reportAt: source.reportAt, // BE:不要\r\n inspector: source.inspector, // BE:検印する場合は null or empty。 差し戻す場合は null。\r\n firstTeamLeader: source.firstTeamLeader,\r\n completeTeamLeader: source.completeTeamLeader,\r\n firstManager: source.firstManager,\r\n completeManager: source.completeManager,\r\n isChecked: source.isStamped ?? false, // BE:未使用\r\n exist: source.exist,// BE:未使用\r\n });\r\n return result;\r\n\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n private static toDtoInspectedStampItems(items: InspectedStampItem[]): DtoInspectedStampItem[] {\r\n const result: DtoInspectedStampItem[] = [];\r\n\r\n for (const item of items) {\r\n const source: DtoInspectedStampItem = ReportUtility.toDtoInspectedStampItem(item);\r\n result.push(source);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toUpdateMaintenanceInspectedStampInput(source: UpdateMaintenanceReportRequest): UpdateMaintenanceInspectedStampInput {\r\n const result = new UpdateMaintenanceInspectedStampInput();\r\n result.init({\r\n machineType: SharedUtility.fromMachineType(source.machineType),\r\n stampItem: ReportUtility.toDtoInspectedStampItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toUpdateDailyInspectedStampInput(source: UpdateDailyReportRequest): UpdateDailyInspectedStampInput {\r\n const result = new UpdateDailyInspectedStampInput();\r\n result.init({\r\n stampItems: ReportUtility.toDtoInspectedStampItems(source.items),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toUpdateWeeklyInspectedStampInput(source: UpdateWeeklyReportRequest): UpdateWeeklyInspectedStampInput {\r\n const result = new UpdateWeeklyInspectedStampInput();\r\n result.init({\r\n stampItems: ReportUtility.toDtoInspectedStampItems(source.items),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toUpdateCompletionInspectedStampInput(source: UpdateCompletionReportRequest): UpdateCompletionInspectedStampInput {\r\n const result = new UpdateCompletionInspectedStampInput();\r\n result.init({\r\n stampItem: ReportUtility.toDtoInspectedStampItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 項目を表示用の項目に変換します。\r\n * @param item 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInspectedStampItem(item?: DtoInspectedStampItem): InspectedStampItem {\r\n if (item?.exist == null) {\r\n throw new Error(\"toInspectedStampItem\");\r\n }\r\n return {\r\n exist: item?.exist,\r\n reportNo: item?.reportNo,\r\n reportAt: item?.reportAt,\r\n inspector: item?.inspector,\r\n isStamped: item?.isChecked,\r\n };\r\n }\r\n\r\n /**\r\n * 項目を表示用の項目に変換します。\r\n * @param key 検印者種別を指定します。\r\n * @param item 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n private static toMaintenanceInspectedStampItem(key: InspecterType, item: DtoInspectedStampItem): InspectedStampItem {\r\n if (item?.exist == null) {\r\n throw new Error(\"toMaintenanceInspectedStampItem\");\r\n }\r\n const inspector = ReportUtility.getInspecterName(key, item);\r\n\r\n const result = {\r\n exist: item?.exist,\r\n reportNo: item?.reportNo,\r\n reportAt: item?.reportAt,\r\n inspector: inspector,\r\n firstTeamLeader: key === InspecterType.FirstTeamLeader ? inspector : void 0,\r\n completeTeamLeader: key === InspecterType.CompleteTeamLeader ? inspector : void 0,\r\n firstManager: key === InspecterType.FirstManager ? inspector : void 0,\r\n completeManager: key === InspecterType.CompleteManager ? inspector : void 0,\r\n isStamped: !!inspector, // 各検印者名が Null で未検印 、それ以外は 検印済\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印者名を取得します。\r\n * @param key 検印者種別を指定します。\r\n * @param item 検印情報を指定します。\r\n * @retuns 検印者名を返します。\r\n */\r\n private static getInspecterName(key: InspecterType, item: DtoInspectedStampItem): string | undefined {\r\n const result: string | undefined =\r\n key === InspecterType.FirstTeamLeader ? item.firstTeamLeader\r\n : key === InspecterType.CompleteTeamLeader ? item.completeTeamLeader\r\n : key === InspecterType.FirstManager ? item.firstManager\r\n : key === InspecterType.CompleteManager ? item.completeManager\r\n : void 0;\r\n return result;\r\n }\r\n\r\n\r\n\r\n /**\r\n * 項目を表示用の項目に変換します。\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMaintenaceReportInspectedStampItem(item?: DtoInspectedStampItem): KeyValueItem[] {\r\n const result: KeyValueItem[] = []\r\n\r\n if (item == null) return result;\r\n\r\n // see:https://qiita.com/wildmouse/items/96ec2a5892e88ea4aec6\r\n Object.entries(InspecterType).forEach(([key, value]) => {\r\n const inspecterType = parseInt(key);\r\n\r\n if (Number.isNaN(inspecterType)) return;\r\n const source: KeyValueItem = {\r\n key: inspecterType,\r\n value: ReportUtility.toMaintenanceInspectedStampItem(inspecterType, item),\r\n }\r\n result.push(source);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 項目を表示用の項目に変換します。\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toDailyReportInspectedStampItem(items?: KeyValueItemOfDayOfWeekAndInspectedStampItem[]): KeyValueItem[] {\r\n const result: KeyValueItem[] = []\r\n\r\n if (items == null) return result;\r\n\r\n for (const item of items) {\r\n const source: KeyValueItem = {\r\n key: SharedUtility.toDayOfWeek(item.key),\r\n value: ReportUtility.toInspectedStampItem(item.value),\r\n }\r\n result.push(source);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 項目を表示用の項目に変換します。\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toWeeklyReportInspectedStampItem(items?: KeyValueItemOfWeekOfMonthAndInspectedStampItem[]): KeyValueItem[] {\r\n const result: KeyValueItem[] = []\r\n\r\n if (items == null) return result;\r\n\r\n for (const item of items) {\r\n const source: KeyValueItem = {\r\n key: SharedUtility.toWeekOfMonth(item.key),\r\n value: ReportUtility.toInspectedStampItem(item.value),\r\n }\r\n result.push(source);\r\n }\r\n return result;\r\n }\r\n //#endregion メソッド\r\n\r\n\r\n\r\n}\r\n","import { WebApiAdapter } from '../../web-api-adapter';\r\nimport { ReportClient, GetDailyReportInput, GetMaintenanceReportInput, GetWeeklyReportInput, GetCompletionReportInput, UpdateDailyInspectedStampInput, GetMaintenancePreviewReportInput, UpdateMaintenanceInspectedStampInput, UpdateWeeklyInspectedStampInput, UpdateCompletionInspectedStampInput } from '../../swagger-clients';\r\nimport { DailyReportRequest, DailyReportResult, MaintenanceReportRequest, MaintenanceReportResult, WeeklyReportRequest, WeeklyReportResult, CompletionReportRequest, CompletionReportResult, UpdateDailyReportRequest, UpdateWeeklyReportRequest, UpdateCompletionReportRequest, UpdateMaintenanceReportRequest, UpdateReportResult, } from './type';\r\nimport { ReportResult } from './type';\r\nimport { ReportUtility } from './report-utility';\r\nimport { ErrorResult } from '../_type';\r\n\r\n/**\r\n * `帳票` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class ReportAdapter extends WebApiAdapter {\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new ReportAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n\r\n //#region メソッド\r\n\r\n //#region エラー情報作成\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): ErrorResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createGetErrorResult(message?: string): ReportResult {\r\n return {\r\n reportUrl: \"\",\r\n ...this.createErrorResult(message)\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createUpdateErrorResult(message?: string): UpdateReportResult {\r\n return {\r\n ...this.createErrorResult(message)\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createMaintenanceReportErrorResult(message?: string): MaintenanceReportResult {\r\n return {\r\n ...this.createGetErrorResult(message)\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createDailyReportErrorResult(message?: string): DailyReportResult {\r\n return {\r\n ...this.createGetErrorResult(message)\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createWeeklyReportErrorResult(message?: string): WeeklyReportResult {\r\n return {\r\n ...this.createGetErrorResult(message)\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createCompletionReportErrorResult(message?: string): WeeklyReportResult {\r\n return {\r\n ...this.createGetErrorResult(message)\r\n };\r\n }\r\n\r\n //#endregion エラー情報作成\r\n\r\n //#region 帳票データ取得\r\n\r\n\r\n /**\r\n * 整備点検票のデータを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getMaintenanceReport(parameter: MaintenanceReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetMaintenanceReportInput();\r\n input.init(ReportUtility.toGetMaintenanceReportInput(parameter));\r\n\r\n const output = await this.client.getMaintenanceReport(input);\r\n if (output == null) {\r\n return this.createMaintenanceReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createMaintenanceReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n stampItems: ReportUtility.toMaintenaceReportInspectedStampItem(output.stampItem),\r\n };\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 日常点検票のデータを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getDailyReport(parameter: DailyReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetDailyReportInput();\r\n input.init(ReportUtility.toGetDailyReportInput(parameter));\r\n\r\n const output = await this.client.getDailyReport(input);\r\n if (output == null) {\r\n return this.createDailyReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createDailyReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: DailyReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n stampItems: ReportUtility.toDailyReportInspectedStampItem(output.stampItems),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 週間月例点検票のデータを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getWeeklyReport(parameter: WeeklyReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetWeeklyReportInput();\r\n input.init(ReportUtility.toGetWeeklyReportInput(parameter));\r\n\r\n\r\n const output = await this.client.getWeeklyReport(input);\r\n if (output == null) {\r\n return this.createWeeklyReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createWeeklyReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: WeeklyReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n stampItems: ReportUtility.toWeeklyReportInspectedStampItem(output.stampItems),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 現場完了時点検票のデータを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getCompletionReport(parameter: CompletionReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetCompletionReportInput();\r\n input.init(ReportUtility.toGetCompletionReportInput(parameter));\r\n\r\n const output = await this.client.getCompletionReport(input);\r\n if (output == null) {\r\n return this.createCompletionReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createCompletionReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: CompletionReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n stampItem: output.stampItem != null ? ReportUtility.toInspectedStampItem(output.stampItem) : void 0,\r\n };\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 整備記録のプレビューを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getMaintenancePreviewReport(parameter: MaintenanceReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetMaintenancePreviewReportInput();\r\n input.init(ReportUtility.toGetMaintenancePreviewReportInput(parameter));\r\n\r\n const output = await this.client.getMaintenancePreviewReport(input);\r\n if (output == null) {\r\n return this.createMaintenanceReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createMaintenanceReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 日常点検記録のプレビューを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getDailyPreviewReport(): Promise {\r\n\r\n // 実行\r\n const output = await this.client.getDailyPreviewReport();\r\n if (output == null) {\r\n return this.createDailyReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createDailyReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 週間月例点検記録のプレビューを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getWeeklyPreviewReport(): Promise {\r\n\r\n // 実行\r\n const output = await this.client.getWeeklyPreviewReport();\r\n if (output == null) {\r\n return this.createWeeklyReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createWeeklyReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 現場完了時点検記録のプレビューを取得します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getCompletionPreviewReport(): Promise {\r\n\r\n // 実行\r\n const output = await this.client.getCompletionPreviewReport();\r\n if (output == null) {\r\n return this.createCompletionReportErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createCompletionReportErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ReportResult = {\r\n isError: false,\r\n reportUrl: output.reportUrl ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n //#endregion 帳票データ取得\r\n\r\n\r\n //#region 帳票データ更新\r\n\r\n /**\r\n * 整備記録票の検印情報を更新します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateMaintenanceInspectedStamp(parameter: UpdateMaintenanceReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new UpdateMaintenanceInspectedStampInput();\r\n input.init(ReportUtility.toUpdateMaintenanceInspectedStampInput(parameter));\r\n\r\n const output = await this.client.updateMaintenanceInspectedStamp(input);\r\n if (output == null) {\r\n return this.createUpdateErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createUpdateErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UpdateReportResult = {\r\n isError: false,\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 日常点検票の検印情報を更新します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateDailyInspectedStamp(parameter: UpdateDailyReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new UpdateDailyInspectedStampInput();\r\n input.init(ReportUtility.toUpdateDailyInspectedStampInput(parameter));\r\n\r\n const output = await this.client.updateDailyInspectedStamp(input);\r\n if (output == null) {\r\n return this.createUpdateErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createUpdateErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UpdateReportResult = {\r\n isError: false,\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 週間月例点検票の検印情報を更新します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateWeeklyInspectedStamp(parameter: UpdateWeeklyReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new UpdateWeeklyInspectedStampInput();\r\n input.init(ReportUtility.toUpdateWeeklyInspectedStampInput(parameter));\r\n\r\n const output = await this.client.updateWeeklyInspectedStamp(input);\r\n if (output == null) {\r\n return this.createUpdateErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createUpdateErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UpdateReportResult = {\r\n isError: false,\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 現場完了時点検票の検印情報を更新します。\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateCompletionInspectedStamp(parameter: UpdateCompletionReportRequest): Promise {\r\n\r\n // 実行\r\n const input = new UpdateCompletionInspectedStampInput();\r\n input.init(ReportUtility.toUpdateCompletionInspectedStampInput(parameter));\r\n\r\n const output = await this.client.updateCompletionInspectedStamp(input);\r\n if (output == null) {\r\n return this.createUpdateErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createUpdateErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UpdateReportResult = {\r\n isError: false,\r\n };\r\n return result;\r\n }\r\n\r\n //#endregion 帳票データ更新\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new ReportClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { RecordsSliceState, createReportListSlice } from '../shared/create-records-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\n// type\r\nimport { MaintenanceRecordAdapter } from '../../adapter/maintenance-record/maintenance-record-adapter';\r\nimport { MaintenanceRecordGetRequest, MaintenanceRecordGetResult, MaintenanceRecordGetDocumentRequest, MaintenanceRecordGetDocumentResult } from '../../adapter/maintenance-record/types';\r\nimport { changeError } from '../global-header/global-header-slice';\r\nimport { MaintenanceRecordListItem, MaintenanceReportItem } from '../../../pages/ConstructionMachineMaster/MaintenanceRecord/_types';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\nimport { MaintenanceReportRequest, UpdateMaintenanceReportRequest } from '../../adapter/report/type';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: RecordsSliceState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n isOpenViewer: false,\r\n isUpdated: false,\r\n isReportLoading: false,\r\n}\r\n\r\n/** 整備記録 Slice を 提供します。*/\r\nexport const MaintenanceRecordSlice = createReportListSlice({\r\n // State Reducer Action を生成\r\n name: 'MaintenanceRecord',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter 要求情報を指定します。\r\n */\r\nexport const onGetAsync = (parameter: MaintenanceRecordGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceRecordSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = MaintenanceRecordAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.item.machineId });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n if (getResult.isError) {\r\n // 異常\r\n dispatch(MaintenanceRecordSlice.actions.fetchFailure());\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n dispatch(MaintenanceRecordSlice.actions.setItems(getResult.items));\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MaintenanceRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 帳票取得処理を行います。\r\n * @param parameter パラメーターを指定します。\r\n */\r\nexport const onGetMaintenanceReportAsync = (parameter: MaintenanceReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceRecordSlice.actions.fetchStart());\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.getMaintenanceReport(parameter);\r\n\r\n // 通信終了\r\n if (result.isError || result.stampItems == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(MaintenanceRecordSlice.actions.setReport(\r\n {\r\n reportUrl: result.reportUrl,\r\n stampItems: result.stampItems,\r\n }\r\n ));\r\n\r\n dispatch(MaintenanceRecordSlice.actions.toggleViewre(true));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MaintenanceRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 検印更新処理を行います。\r\n * @param updateParam 更新パラメーターを指定します。\r\n * @param getParam 取得パラメーターを指定します。\r\n */\r\nexport const onUpdateMaintenanceInspectedStampAsync = (updateParam: UpdateMaintenanceReportRequest, getParam: MaintenanceReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceRecordSlice.actions.fetchStart());\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 更新フラグ OFF\r\n dispatch(MaintenanceRecordSlice.actions.changeUpdatedFlag(false));\r\n\r\n // URL クリア\r\n dispatch(MaintenanceRecordSlice.actions.clearReport());\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.updateMaintenanceInspectedStamp(updateParam);\r\n\r\n // 通信終了\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 更新完了\r\n\r\n // 通信処理\r\n const getResult = await ReportAdapter.instance.getMaintenanceReport(getParam);\r\n\r\n // 通信終了\r\n if (getResult.isError || getResult.stampItems == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(MaintenanceRecordSlice.actions.setReport(\r\n {\r\n reportUrl: getResult.reportUrl,\r\n stampItems: getResult.stampItems,\r\n }\r\n ));\r\n\r\n dispatch(MaintenanceRecordSlice.actions.changeUpdatedFlag(true));\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MaintenanceRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n","import { Options } from 'material-table';\r\nimport { MuiTableOptions } from '../../../components/MuiTable';\r\nimport indigo from '@material-ui/core/colors/indigo';\r\n\r\n/** 施工機管理系の material-table のオプションを提供します。 */\r\nexport const ConstructionMchineMasterOptions: Options = {\r\n ...MuiTableOptions,\r\n headerStyle: {\r\n // ヘッダー 背景色\r\n backgroundColor: indigo[300],\r\n },\r\n // 最大高さ\r\n maxBodyHeight: \"calc(100vh - 232px)\", // 固定\r\n // 最小高さ\r\n minBodyHeight: \"75vh\", // 固定\r\n}\r\n","// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n/** スタイルを提供します。 */\r\nexport const useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // テーブルソートヘッダー\r\n sortHeader: {\r\n // ソートされているカラム ヘッダー\r\n \"& .MuiTableSortLabel-active\": {\r\n color: theme.palette.text.primary,\r\n },\r\n // ソートアイコンカラー\r\n \"& .MuiTableSortLabel-active .MuiTableSortLabel-icon\": {\r\n color: `${theme.palette.text.primary}!important` as string,\r\n },\r\n // material-table スクロールバーをデフォルトに上書き\r\n \"& > div > div > div > div\": {\r\n overflowY: \"visible !important\",\r\n },\r\n },\r\n // 帳票アイコンボタン\r\n icon: {\r\n color: theme.palette.text.secondary\r\n },\r\n // 検印済み\r\n iconStamped: {\r\n color: theme.palette.success.main\r\n\r\n }\r\n\r\n })\r\n);\r\n","import * as React from 'react'\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IconButton } from '@material-ui/core';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 帳票アイコンボタン\r\n icon: {\r\n color: theme.palette.text.secondary\r\n },\r\n // 検印済み\r\n iconStamped: {\r\n color: theme.palette.success.main\r\n }\r\n })\r\n);\r\n\r\n/** 帳票記録テーブル項目のインターフェイスを提供します。 */\r\ninterface ReportListItem {\r\n /** 検印済みかどうかを表します。 */\r\n isStamped?: boolean,\r\n}\r\n\r\n/** 帳票アイコン ボタン の Props を提供します。 */\r\ninterface Props {\r\n /** 行データを表します。 */\r\n rowData: T & ReportListItem,\r\n /** クリック時の処理を表します。 */\r\n onClick: (rowData: T) => void,\r\n}\r\n\r\n/**\r\n * 帳票アイコンボタンを表示します。\r\n * @param props Props を指定します。\r\n */\r\nexport function ReportIconButton(props: Props): JSX.Element {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n props.onClick(props.rowData)}\r\n >\r\n \r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport MaterialTable, { MTableBodyRow, Column } from 'material-table';\r\nimport Box from '@material-ui/core/Box';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// type\r\nimport { MaintenanceRecordListItem } from \"../../_types\";\r\n// 共通component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\nimport { ConstructionMchineMasterOptions } from '../../../Shared/ConstructionMchineMasterTableOptions';\r\nimport { useStyles } from '../../../Shared/ConstructionMchineMasterTableStyles';\r\nimport { ReportIconButton } from '../../../Shared/components/ReportIconButton/ReportIconButton';\r\n\r\n/** 整備記録テーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MaintenanceRecordListItem[],\r\n /** 帳票出力イベントを表します。 */\r\n onDocumentClickAysnc: (rowData: MaintenanceRecordListItem) => void,\r\n}\r\n\r\n/** 整備記録テーブルの State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n\r\n/** 整備記録テーブルを提供します */\r\nconst MaintenanceRecordTable: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 整備記録テーブルのカラムを表します。 */\r\n const columnData: Column[] = [\r\n {\r\n title: \"帳票\",\r\n field: \"isStamped\",\r\n width: 50,\r\n cellStyle: { padding: \"0px 5px\" },\r\n render: (rowData: MaintenanceRecordListItem) => (\r\n \r\n rowData={rowData}\r\n onClick={props.onDocumentClickAysnc}\r\n />\r\n ),\r\n },\r\n {\r\n title: \"整備記録表 No.\",\r\n field: \"no\",\r\n },\r\n {\r\n title: \"整備完了日時\",\r\n field: \"completionDate\",\r\n },\r\n {\r\n title: \"工法\",\r\n field: \"constructionMethod\",\r\n },\r\n {\r\n title: \"所属\",\r\n field: \"area\",\r\n },\r\n {\r\n title: \"作業場所\",\r\n field: \"site\",\r\n },\r\n {\r\n title: \"作業者\",\r\n field: \"worker\",\r\n },\r\n {\r\n title: \"報告事項\",\r\n field: \"report\",\r\n cellStyle: {\r\n width: 500,\r\n maxWidth: 500,\r\n },\r\n headerStyle: {\r\n width: 500,\r\n maxWidth: 500,\r\n },\r\n render: (rowData: MaintenanceRecordListItem) => (\r\n \r\n <>{rowData.report}\r\n \r\n ),\r\n },\r\n\r\n ];\r\n\r\n /** カラム情報を提供します。 */\r\n const [values, setValues] = useState({\r\n columns: columnData,\r\n });\r\n\r\n /**\r\n * ソート変更時のイベント処理を行います。\r\n * @param orderBy\r\n * @param orderDirection\r\n */\r\n const onOrderChange = (orderBy: number, orderDirection: \"asc\" | \"desc\"): void => {\r\n\r\n // 再レンダーされる時にソート順がリセットされないようにState で保持する\r\n setValues({\r\n columns: values.columns.map((column, index) => {\r\n if (index === orderBy) {\r\n column.defaultSort = orderDirection;\r\n } else {\r\n delete column.defaultSort\r\n }\r\n return column;\r\n })\r\n })\r\n };\r\n\r\n return (\r\n \r\n\r\n {\r\n return (\r\n props.onDocumentClickAysnc(rowProps.data)}\r\n {...rowProps}\r\n />\r\n )\r\n }\r\n }}\r\n onOrderChange={onOrderChange}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceRecordTable;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { onGetMaintenanceReportAsync, MaintenanceRecordSlice } from '../../../../../modules/slice/maintenance-record/maintenance-record-slice';\r\n// type\r\nimport { MaintenanceRecordListItem, MaintenanceRecordSearchType } from \"../../_types\";\r\nimport { AreaType } from '../../../../../_types';\r\n// component\r\nimport MaintenanceRecordTable from './MaintenanceRecordTable';\r\n\r\n/** 整備記録テーブルを提供します */\r\nconst MaintenanceRecordTableContainer: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const data: MaintenanceRecordListItem[] = useSelector((state: RootState) => state.maintenanceRecord.resultItems ?? []);\r\n const areaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * 帳票ボタンクリック時のイベント処理を行います。\r\n * @param rowData\r\n */\r\n const onDocumentClickAsync = async (rowData: MaintenanceRecordListItem) => {\r\n if (!machine || !machine.item.id) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"施工機情報がありません\"));\r\n }\r\n else {\r\n // 選択項目保存\r\n dispatch(MaintenanceRecordSlice.actions.selectItem(rowData));\r\n // 通信\r\n await dispatch(onGetMaintenanceReportAsync({\r\n machineType: machine.type,\r\n machineId: machine.item.id,\r\n reportAt: rowData.completionDate,\r\n reportNo: rowData.no,\r\n }));\r\n }\r\n\r\n }\r\n\r\n /**\r\n * エリア種別のフィルター処理を行います。\r\n * @param source テーブルデータを指定します。\r\n * @param areaType エリア種別を指定します。\r\n * @returns フィルタ後のテーブルデータを返します。\r\n */\r\n const areaTypeFilter = (source: MaintenanceRecordListItem[], areaType: AreaType) => {\r\n\r\n // エリアが確定していない施工機は全国でしか表示しない。\r\n // material-tableにデータをそのまま渡すとErrorになるので複製・参照を切る\r\n return source.filter(item => (areaType === AreaType.None ? true : item.areaType === areaType)).map(item => ({ ...item }));\r\n\r\n }\r\n\r\n return (\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default MaintenanceRecordTableContainer;\r\n","/**\r\n * `@material-ui/pickers` 関連の ユーティリティ機能のを提供します。\r\n */\r\nexport class MuiDatePickerUtility {\r\n\r\n /** 日本語のテキストメッセージを表します。 */\r\n /** 無効な日付が指定されたときのメッセージを表します。 */\r\n static readonly invalidDateMessage = \"無効な日付形式です\"\r\n /** 無効な日付が指定されたときのメッセージを表します。 */\r\n static readonly invalidLabel = \"無効な日付です\"\r\n /** 入力域の日付情報より後の日付が指定されたときのメッセージを表します。 */\r\n static readonly maxDateMessage = \"入力域の日付情報より後の日付は指定できません\"\r\n /** 入力域の日付情報より前日付が指定されたときのメッセージを表します。 */\r\n static readonly minDateMessage = \"入力域の日付情報より前の日付は指定できません\"\r\n\r\n /** 日付選択時のフォーマットを表します*/\r\n static readonly dateFormat = \"yyyy 年 MM 月 dd 日\"\r\n /** 年月選択時のフォーマットを表します*/\r\n static readonly yearAndMonthFormat = \"yyyy 年 MM 月\"\r\n}\r\n","import * as React from \"react\";\r\nimport { KeyboardDatePicker, KeyboardDatePickerProps } from \"@material-ui/pickers\";\r\nimport { MuiDatePickerUtility } from './mui-date-picker-utility';\r\n\r\n/**\r\n * 日付ピッカーを表示します。\r\n * @param props\r\n */\r\nexport const MuiKeybordDatePicker: React.FC = (props) => {\r\n\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default MuiKeybordDatePicker;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n TextField,\r\n FormControlLabel,\r\n Box,\r\n RadioGroup,\r\n Radio,\r\n FormControl,\r\n} from '@material-ui/core';\r\n// component\r\nimport { MaintenanceRecordSearchType, StampSearchType } from '../../_types';\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタン\r\n radioGroup: {\r\n display: \"inline-flex\",\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // グループ化 枠\r\n groupContainer: {\r\n position: \"relative\",\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderStyle: \"solid\",\r\n borderRadius: 4,\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n\r\n },\r\n // グループ化 タイトル\r\n groupTitle: {\r\n position: \"absolute\",\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n top: \"-12px\",\r\n left: \"-8px\",\r\n fontWeight: \"bold\",\r\n backgroundColor: theme.palette.background.paper,\r\n }\r\n }),\r\n);\r\n\r\n/** 整備記録画面 検索エリアの State を表示します。 */\r\nexport interface MaintenanceRecordSearchState {\r\n /**キーワードを表します。 */\r\n keyword: string,\r\n /** 検索条件を表します。 */\r\n searchType: MaintenanceRecordSearchType,\r\n /** 検索条件を表します。 */\r\n searchStampType: StampSearchType,\r\n /** 開始日を表します。 */\r\n beginAt: Date | null,\r\n /** 終了日を表します。 */\r\n endAt: Date | null,\r\n}\r\n\r\n/** 整備記録画面 検索エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 入力初期値を表します。 */\r\n initInputItem: MaintenanceRecordSearchState,\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (inputItem: MaintenanceRecordSearchState) => void\r\n}\r\n\r\n/** 整備記録画面 検索エリアを表示します。*/\r\nconst MaintenanceRecordSearch: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: MaintenanceRecordSearchType.Place, label: \"作業場所\" },\r\n { key: MaintenanceRecordSearchType.Worker, label: \"作業者\" },\r\n { key: MaintenanceRecordSearchType.Report, label: \"報告事項\" },\r\n ];\r\n\r\n const stampSearchTypeRadioButton = [\r\n { key: StampSearchType.None, label: \"未指定\" },\r\n { key: StampSearchType.Done, label: \"検印済み\" },\r\n { key: StampSearchType.NotYet, label: \"検印なし\" },\r\n ]\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力項目を提供します。*/\r\n const [values, setValues] = useState(props.initInputItem);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof MaintenanceRecordSearchState) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n return (\r\n \r\n\r\n
\r\n \r\n 検索範囲\r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n {radioButtons.map((value, index) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n
\r\n\r\n\r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(data)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(data)}\r\n />\r\n\r\n \r\n 検印\r\n \r\n\r\n \r\n\r\n {stampSearchTypeRadioButton.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(values)}\r\n />\r\n\r\n
\r\n );\r\n\r\n};\r\n\r\nexport default MaintenanceRecordSearch;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/maintenance-record/maintenance-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport MaintenanceRecordSearch, { MaintenanceRecordSearchState } from './MaintenanceRecordSearch';\r\nimport { MaintenanceRecordSearchType, StampSearchType } from '../../_types';\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n */\r\nconst initState = (): MaintenanceRecordSearchState => {\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n const result: MaintenanceRecordSearchState = {\r\n keyword: \"\",\r\n searchType: MaintenanceRecordSearchType.Report,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** 整備記録画面 検索エリアを表示します。 */\r\nconst MaintenanceSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.maintenanceRecord?.isUpdated ?? false);\r\n const isOpenViewer = useSelector((state: RootState) => state.maintenanceRecord.isOpenViewer ?? true);\r\n\r\n const [value, setValue] = useState(initState);\r\n\r\n useEffect(() => {\r\n\r\n if (isUpdated && !isOpenViewer && machine) {\r\n onSearchClickAsync(value);\r\n }\r\n\r\n }, [machine, isUpdated, isOpenViewer, value, dispatch]);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (inputItem: MaintenanceRecordSearchState) => {\r\n setValue(inputItem);\r\n\r\n if (machine) {\r\n\r\n // 実行\r\n await dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: inputItem.keyword,\r\n searchType: inputItem.searchType,\r\n searchStampType: inputItem.searchStampType,\r\n beginAt: inputItem.beginAt,\r\n endAt: inputItem.endAt,\r\n }\r\n }));\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceSearchContainer;\r\n","import * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport amber from '@material-ui/core/colors/amber';\r\n \r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // primary\r\n primary: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.primary.dark\r\n },\r\n // \"&:disabled\": {\r\n // // opacity: 0.4,\r\n // backgroundColor: theme.palette.primary.light\r\n // }\r\n },\r\n // secondary\r\n secondary: {\r\n backgroundColor: theme.palette.secondary.main,\r\n color: theme.palette.secondary.contrastText,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.secondary.dark\r\n },\r\n //\"&:disabled\": {\r\n // backgroundColor: theme.palette.secondary.light\r\n //}\r\n },\r\n // error\r\n error: {\r\n backgroundColor: theme.palette.error.main,\r\n color: theme.palette.error.contrastText,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.error.dark\r\n },\r\n //\"&:disabled\": {\r\n // backgroundColor: theme.palette.action.disabledBackground,\r\n // //backgroundColor: theme.palette.error.light\r\n //}\r\n },\r\n // warning\r\n warning: {\r\n backgroundColor: amber[500],\r\n color: '#fff',\r\n \"&:hover\": {\r\n backgroundColor: '#b28704',\r\n },\r\n //\"&:disabled\": {\r\n // backgroundColor: '#ffcd38',\r\n //}\r\n }\r\n\r\n\r\n }),\r\n);\r\n\r\n/**\r\n * 上書きカラーの タイプ を 提供します。\r\n */\r\ntype OverrideColor = | \"primary\" | \"secondary\" | \"error\" | \"warning\";\r\n\r\n\r\n/** 拡張ボタン Props を提供します。*/\r\ninterface ExtendsButtonProps extends ButtonProps {\r\n /** 上書きするカラーを表します。*/\r\n overrideColor?: OverrideColor;\r\n}\r\n\r\n/**\r\n * カラー上書き ボタンを表示します。\r\n * @param props\r\n */\r\n// 独自に追加したProps は 分割代入する `styled-components` https://styled-components.com/docs/faqs#why-am-i-getting-html-attribute-warnings\r\nconst MuiColorButton: React.FC = ({ overrideColor, ...props }) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n \r\n )\r\n}\r\n\r\nexport default MuiColorButton;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { ButtonProps } from '@material-ui/core/Button';\r\nimport MuiColorButton from './ColorButton/MuiColorButton';\r\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\r\n\r\n/**\r\n * 一覧に戻るボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiBackToListButton: React.FC = (props) => {\r\n\r\n return (\r\n\r\n }\r\n >\r\n 記録表一覧に戻る\r\n \r\n )\r\n}\r\n\r\nexport default MuiBackToListButton;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport CreateIcon from '@material-ui/icons/Create';\r\nimport amber from '@material-ui/core/colors/amber';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n backgroundColor: amber[500],\r\n color: '#fff',\r\n \"&:hover\": {\r\n backgroundColor: '#b28704',\r\n },\r\n \"&:disabled\": {\r\n backgroundColor: '#ffcd38',\r\n }\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * 更新ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiUpdateButton: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n 更新\r\n \r\n )\r\n}\r\n\r\nexport default MuiUpdateButton;\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Chip } from '@material-ui/core';\r\nimport cyan from '@material-ui/core/colors/cyan';\r\nimport CheckCircleOutlineIcon from '@material-ui/icons/CheckCircleOutline';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // チップ\r\n chip: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: cyan[700],\r\n },\r\n // アイコン\r\n icon: {\r\n color: theme.palette.secondary.contrastText,\r\n }\r\n })\r\n);\r\n\r\n\r\n/**\r\n * 検印実行ステータスのアイコンを表示します。\r\n */\r\nconst StampTag: React.FC<{}> = () => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n }\r\n />\r\n )\r\n}\r\n\r\nexport default StampTag;\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Chip } from '@material-ui/core';\r\nimport deepOrange from '@material-ui/core/colors/deepOrange';\r\nimport ReplyIcon from '@material-ui/icons/Reply';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // チップ\r\n chip: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: deepOrange[700],\r\n },\r\n // アイコン\r\n icon: {\r\n color: theme.palette.secondary.contrastText,\r\n }\r\n })\r\n);\r\n\r\n\r\n/**\r\n * 差し戻しステータスのアイコンを表示します。\r\n */\r\nconst SendBackTag: React.FC<{}> = () => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default SendBackTag;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { Dialog, DialogActions, DialogTitle, DialogContent, Typography, TextField, InputAdornment, IconButton, Box, TableContainer, Table, TableHead, TableRow, TableCell, Paper, TableBody, Chip, useTheme } from '@material-ui/core';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiUpdateButton from '../../../../../components/Buttons/MuiUpdateButton';\r\nimport { UpdateInspectedStampListItem, StampUpdateStaus } from '../../../_types';\r\nimport MaterialTable, { Column } from 'material-table';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport StampTag from './StampTag';\r\nimport SendBackTag from './SendBackTag';\r\nimport AccountBoxIcon from '@material-ui/icons/AccountBox';\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // サブタイトル\r\n subtitle: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n\r\n // 検印者\r\n inspector: {\r\n fontWeight: \"bold\",\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n // ダイアログコンテンツ(ダイアログ内のTextfiledのlabelが全角4文字以上でスクロールが発生するで、無効にする)\r\n dialogContent: {\r\n overflowY: \"visible\"\r\n },\r\n // テーブル\r\n table: {\r\n marginBottom: theme.spacing(2),\r\n \"& tbody>.MuiTableRow-root\": {\r\n pointerEvents: \"none\",\r\n }\r\n },\r\n\r\n\r\n }),\r\n);\r\n\r\n/** 検印確認ダイアログの Props を表示します。 */\r\ninterface Props {\r\n /** 検印者名を表します。 */\r\n inspectionName: string;\r\n /** 検印情報を表します。 */\r\n dataSource: UpdateInspectedStampListItem[],\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** 更新ボタンクリック時の処理を表します。 */\r\n onUpdateClick: () => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n}\r\n\r\n/**\r\n * 検印確認ダイアログを表示します。\r\n * @param props\r\n */\r\nfunction InspectionConfirmDialog(props: Props): JSX.Element {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** テーブルカラムを表します。 */\r\n const columns: Column>[] = [\r\n {\r\n title: \"検印データ\",\r\n field: \"data\",\r\n align: \"left\",\r\n headerStyle: {\r\n width: 200,\r\n minWidth: 200,\r\n },\r\n },\r\n {\r\n title: \"更新前\",\r\n field: \"isStampBefore\",\r\n align: \"center\",\r\n headerStyle: {\r\n width: 75,\r\n maxWidth: 75,\r\n },\r\n render: (row: UpdateInspectedStampListItem) => (\r\n \r\n {row.exist\r\n ? row.isStampBefore ? \"検印\" : \"未検印\"\r\n : \"\"}\r\n \r\n )\r\n },\r\n {\r\n title: \"\",\r\n align: \"center\",\r\n headerStyle: {\r\n width: 50,\r\n maxWidth: 50,\r\n },\r\n render: (row: UpdateInspectedStampListItem) => (\r\n row.exist\r\n ? \r\n : <>\r\n )\r\n },\r\n {\r\n title: \"更新後\",\r\n field: \"isStampAfter\",\r\n align: \"center\",\r\n headerStyle: {\r\n width: 75,\r\n maxWidth: 75,\r\n },\r\n render: (row: UpdateInspectedStampListItem) => (\r\n \r\n {row.exist\r\n ? row.isStampAfter ? \"検印\" : \"未検印\"\r\n : \"\"}\r\n \r\n )\r\n },\r\n {\r\n title: \"\",\r\n field: \"status\",\r\n align: \"center\",\r\n headerStyle: {\r\n width: 100,\r\n maxWidth: 100,\r\n },\r\n render: (row: UpdateInspectedStampListItem) => (\r\n row.status === StampUpdateStaus.Stamp ? \r\n : row.status === StampUpdateStaus.SendBack ? \r\n : <>\r\n )\r\n },\r\n\r\n\r\n ]\r\n\r\n /**\r\n * 更新が有効かどうかを判定します。\r\n * @param listItem\r\n * @returns 有効かどうかを返します。有効の場合は true を、それ以外の場合は flase を返します。\r\n */\r\n const checkEnableUpdate = (listItem: UpdateInspectedStampListItem[]): boolean => {\r\n const result = listItem.some(item => item.status !== StampUpdateStaus.None)\r\n return result;\r\n }\r\n\r\n return (\r\n \r\n\r\n {/* タイトル */}\r\n \r\n \r\n 検印更新確認\r\n \r\n \r\n\r\n \r\n\r\n {/* message */}\r\n \r\n {checkEnableUpdate(props.dataSource)\r\n ? \"帳票の検印状態を変更します。よろしいですか?\"\r\n : \"検印の更新項目はありません。\"\r\n }\r\n \r\n\r\n \r\n \r\n 検印者:{props.inspectionName}\r\n \r\n\r\n {/* 更新内容表示 */}\r\n
\r\n ) => {\r\n if (rowData.status === StampUpdateStaus.Stamp) {\r\n return { backgroundColor: fade(theme.palette.success.main, 0.5) }\r\n } else if (rowData.status === StampUpdateStaus.SendBack) {\r\n return { backgroundColor: fade(theme.palette.error.main, 0.5) }\r\n } else {\r\n return {}\r\n }\r\n }\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n components={{\r\n Container: (props) => {\r\n return (\r\n \r\n )\r\n },\r\n }}\r\n />\r\n
\r\n\r\n
\r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n {checkEnableUpdate(props.dataSource) &&\r\n \r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nexport default InspectionConfirmDialog;\r\n","import { KeyValueItem, DayOfWeek, WeekOfMonth } from \"../../../_types\";\r\nimport { InspectedStampItem, StampUpdateStaus, UpdateInspectedStampListItem, InspecterType } from \"../_types\";\r\nimport { SharedUtility } from \"../../../modules/shared/shared-utility\";\r\n\r\n/*\r\n * 施工機記録表関連のユーティリティ機能を提供します。\r\n */\r\nexport class ConstructionMacineMasterUtility {\r\n\r\n //#region フィールド\r\n\r\n /** 整備検印者種別文字配列を表します。 */\r\n static readonly InspecterTypeStrings: KeyValueItem[] = [\r\n { key: InspecterType.FirstTeamLeader, value: \"初検ー班長\" },\r\n { key: InspecterType.CompleteTeamLeader, value: \"完検ー班長\" },\r\n { key: InspecterType.FirstManager, value: \"初検ー課長\" },\r\n { key: InspecterType.CompleteManager, value: \"完検ー課長\" },\r\n ];\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 整備検印者種別を文字列に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInspecterTypeText(source: InspecterType): string {\r\n const result: string | undefined = ConstructionMacineMasterUtility.InspecterTypeStrings.find(item => item.key === source)?.value;\r\n\r\n if (result == null) {\r\n throw new Error(\"toInspecterTypeText\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印情報文字列を返します。\r\n * @param data 検印情報を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInspectedStampString(data: InspectedStampItem): string {\r\n const result = data.exist\r\n ? `${data.reportAt}`\r\n : \"未検査\"\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印情報文字列を返します。\r\n * @param data 検印情報を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInspecterString(data: InspectedStampItem): string {\r\n const result = data.exist && !!data.inspector\r\n ? `${data.inspector}`\r\n : \"未検印\"\r\n return result;\r\n }\r\n\r\n /**\r\n * 整備記録表の検印情報のラジオボタンラベル文字列を返します。\r\n *\r\n * @param data 項目を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMaintenanceInspectionRadioLableString(data: KeyValueItem): string {\r\n // e.g. [初検ー班長] 山田\r\n return `[${ConstructionMacineMasterUtility.toInspecterTypeText(data.key)}] ${ConstructionMacineMasterUtility.toInspecterString(data.value)}`\r\n }\r\n\r\n /**\r\n * 現場完了時点検記録表の検印情報のラジオボタンラベル文字列を返します。\r\n *\r\n * @param data 項目を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toCompletionInspectionRadioLableString(data: InspectedStampItem): string {\r\n // e.g. E-現場完了-202004-0001\r\n return `${data.reportNo ?? \"\"}`\r\n }\r\n\r\n /**\r\n * 日常点検記録表の検印情報のラジオボタンラベル文字列を返します。\r\n *\r\n * @param data 項目を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toDailyInspectionRadioLableString(data: KeyValueItem): string {\r\n // e.g. [日] 2020-04-01\r\n // [月] 未検査\r\n return `[${SharedUtility.toDayOfWeekText(data.key)}] ${ConstructionMacineMasterUtility.toInspectedStampString(data.value)}`\r\n }\r\n\r\n /**\r\n * 週間月例記録表の検印情報のラジオボタンラベル文字列を返します。\r\n *\r\n * @param data 項目を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toWeeklyInspectionRadioLableString(data: KeyValueItem): string {\r\n // e.g. [第1週] 2020-04-01\r\n // [第2週] 未検査\r\n return `[${SharedUtility.toWeekOfMonthText(data.key)}] ${ConstructionMacineMasterUtility.toInspectedStampString(data.value)}`\r\n }\r\n\r\n /**\r\n * 更新ステータスを取得します。\r\n * @param before 更新前の検印状態を指定します。\r\n * @param after 更新後の検印状態を指定します。\r\n * @returns 更新ステータスを返します。\r\n */\r\n public static getUpdateStatus(before?: boolean, after?: boolean): StampUpdateStaus {\r\n // undefined を考慮して `===` で厳密チェック\r\n const result: StampUpdateStaus =\r\n before === false && after === true ? StampUpdateStaus.Stamp\r\n : before === true && after === false ? StampUpdateStaus.SendBack\r\n : StampUpdateStaus.None\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印更新情報リストに変換します。\r\n * @param source 検印情報を指定します。\r\n * @param checkedId 入力情報を指定します。\r\n * @param inspectorName 検印者名を指定します。\r\n * @returns 検印更新情報リストを返します。\r\n */\r\n public static convertDailyListItem(source: KeyValueItem[], checkedId: DayOfWeek[], inspectorName: string): UpdateInspectedStampListItem[] {\r\n const result: UpdateInspectedStampListItem[] = [];\r\n source.map((data, index) => {\r\n const isStampBefore = data.value.exist && data.value.isStamped != null ? data.value.isStamped : void 0;\r\n const isStampAfter = data.value.exist && data.value.isStamped != null ? checkedId.includes(data.key) : void 0;\r\n\r\n const item: UpdateInspectedStampListItem = {\r\n key: data.key,\r\n reportNo: data.value.reportNo,\r\n reportAt: data.value.reportAt,\r\n data: ConstructionMacineMasterUtility.toDailyInspectionRadioLableString(data),\r\n exist: data.value.exist,\r\n isStampBefore: isStampBefore,\r\n isStampAfter: isStampAfter,\r\n inspector: isStampAfter ? inspectorName : data.value.inspector,\r\n status: ConstructionMacineMasterUtility.getUpdateStatus(isStampBefore, isStampAfter),\r\n }\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印更新情報リストに変換します。\r\n * @param source 検印情報を指定します。\r\n * @param checkedId 入力情報を指定します。\r\n * @param inspectorName 検印者名を指定します。\r\n * @returns 検印更新情報リストを返します。\r\n */\r\n public static convertWeeklyListItem(source: KeyValueItem[], checkedId: WeekOfMonth[], inspectorName: string): UpdateInspectedStampListItem[] {\r\n const result: UpdateInspectedStampListItem[] = [];\r\n source.map((data, index) => {\r\n const isStampBefore = data.value.exist && data.value.isStamped != null ? data.value.isStamped : void 0;\r\n const isStampAfter = data.value.exist && data.value.isStamped != null ? checkedId.includes(data.key) : void 0;\r\n\r\n const item: UpdateInspectedStampListItem = {\r\n key: data.key,\r\n reportNo: data.value.reportNo,\r\n reportAt: data.value.reportAt,\r\n data: ConstructionMacineMasterUtility.toWeeklyInspectionRadioLableString(data),\r\n exist: data.value.exist,\r\n isStampBefore: isStampBefore,\r\n isStampAfter: isStampAfter,\r\n inspector: isStampAfter ? inspectorName : data.value.inspector,\r\n status: ConstructionMacineMasterUtility.getUpdateStatus(isStampBefore, isStampAfter),\r\n }\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n /**\r\n * 検印更新情報リストに変換します。\r\n * @param isChecked 入力情報を指定します。\r\n * @param inspectorName 検印者名を指定します。\r\n * @param source 検印情報を指定します。\r\n * @returns 検印更新情報リストを返します。\r\n */\r\n public static convertCompletionInspectionListItem(isChecked: boolean, inspectorName: string, source?: InspectedStampItem): UpdateInspectedStampListItem[] {\r\n const result: UpdateInspectedStampListItem[] = [];\r\n if (source == null) return result;\r\n\r\n const isStampBefore = source.exist && source.isStamped != null ? source.isStamped : void 0;\r\n const isStampAfter = source.exist && source.isStamped != null ? isChecked : void 0;\r\n const status = ConstructionMacineMasterUtility.getUpdateStatus(isStampBefore, isStampAfter);\r\n\r\n const item: UpdateInspectedStampListItem = {\r\n key: 0, // 固定(不使用)\r\n reportNo: source.reportNo,\r\n reportAt: source.reportAt,\r\n data: ConstructionMacineMasterUtility.toCompletionInspectionRadioLableString(source),\r\n exist: source.exist,\r\n isStampBefore: isStampBefore,\r\n isStampAfter: isStampAfter,\r\n status: status,\r\n inspector: status ===\r\n StampUpdateStaus.None ? source.inspector // 変更無し:既存データのまま\r\n : StampUpdateStaus.Stamp ? inspectorName // 検印:検印者名\r\n : StampUpdateStaus.SendBack ? void 0 // 差し戻し:null\r\n : void 0\r\n }\r\n result.push(item);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印更新情報リストに変換します。\r\n * @param source 検印情報を指定します。\r\n * @param checkedId 入力情報を指定します。\r\n * @param inspectorName 検印者名を指定します。\r\n * @returns 検印更新情報リストを返します。\r\n */\r\n public static convertMaintenanceListItem(source: KeyValueItem[], checkedId: InspecterType[], inspectorName: string): UpdateInspectedStampListItem[] {\r\n const result: UpdateInspectedStampListItem[] = [];\r\n if (source == null) return result;\r\n source.map((data, index) => {\r\n const isStampBefore = data.value.exist && data.value.isStamped != null ? data.value.isStamped : void 0;\r\n const isStampAfter = data.value.exist && data.value.isStamped != null ? checkedId.includes(data.key) : void 0;\r\n const status = ConstructionMacineMasterUtility.getUpdateStatus(isStampBefore, isStampAfter);\r\n\r\n const item: UpdateInspectedStampListItem = {\r\n key: data.key,\r\n reportNo: data.value.reportNo,\r\n reportAt: data.value.reportAt,\r\n data: ConstructionMacineMasterUtility.toMaintenanceInspectionRadioLableString(data),\r\n exist: data.value.exist,\r\n isStampBefore: isStampBefore,\r\n isStampAfter: isStampAfter,\r\n status: status,\r\n inspector: status ===\r\n StampUpdateStaus.None ? data.value.inspector // 変更無し:既存データのまま\r\n : StampUpdateStaus.Stamp ? inspectorName // 検印:検印者名\r\n : StampUpdateStaus.SendBack ? void 0 // 差し戻し:null\r\n : void 0\r\n }\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新用の検印情報に変換します。\r\n * @param listItem 検印更新情報リストを指定します。\r\n * @param inspector 検印者を指定します。\r\n * @returns 検印情報を返します。\r\n */\r\n public static toUpdateDailyInspectedStampItem(listItem: UpdateInspectedStampListItem[]): InspectedStampItem[] {\r\n const result: InspectedStampItem[] = [];\r\n\r\n listItem.forEach((item) => {\r\n if (item.status !== StampUpdateStaus.None) {\r\n const updateItem: InspectedStampItem = {\r\n reportNo: item.reportNo,\r\n reportAt: item.reportAt, // BE 不要\r\n inspector: item.status === StampUpdateStaus.Stamp ? item.inspector : void 0, // BE 検印する場合は null or empty。 差し戻す場合は null。\r\n exist: item.exist, // BE 不使用\r\n isStamped: item.isStampAfter, // BE 不使用\r\n }\r\n result.push(updateItem);\r\n }\r\n })\r\n\r\n return result;\r\n\r\n }\r\n\r\n /**\r\n * 更新用の検印情報に変換します。\r\n * @param listItem 検印更新情報リストを指定します。\r\n * @param inspector 検印者を指定します。\r\n * @returns 検印情報を返します。\r\n */\r\n public static toUpdateWeeklyInspectedStampItem(listItem: UpdateInspectedStampListItem[]): InspectedStampItem[] {\r\n const result: InspectedStampItem[] = [];\r\n\r\n listItem.forEach((item) => {\r\n if (item.status !== StampUpdateStaus.None) {\r\n const updateItem: InspectedStampItem = {\r\n reportNo: item.reportNo,\r\n reportAt: item.reportAt, // BE 不要\r\n inspector: item.status === StampUpdateStaus.Stamp ? item.inspector : void 0, // BE 検印する場合は null or empty。 差し戻す場合は null。\r\n exist: item.exist, // BE 不使用\r\n isStamped: item.isStampAfter, // BE 不使用\r\n }\r\n result.push(updateItem);\r\n }\r\n })\r\n\r\n return result;\r\n\r\n }\r\n\r\n /**\r\n * 更新用の検印情報に変換します。\r\n * @param listItem 検印更新情報リストを指定します。\r\n * @returns 検印情報を返します。\r\n */\r\n public static toUpdateCompletionInspectedStampItem(listItem: UpdateInspectedStampListItem[]): InspectedStampItem | null {\r\n if (listItem.length !== 1) {\r\n return null;\r\n } else {\r\n const item = listItem[0];\r\n const result: InspectedStampItem = {\r\n reportNo: item.reportNo,\r\n reportAt: item.reportAt, // BE 不要\r\n inspector: item.status === StampUpdateStaus.Stamp ? item.inspector : void 0, // BE 検印する場合は null or empty。 差し戻す場合は null。\r\n exist: item.exist, // BE 不使用\r\n isStamped: item.isStampAfter, // BE 不使用\r\n }\r\n return result\r\n }\r\n }\r\n\r\n /**\r\n * 更新用の検印情報に変換します。\r\n * @param listItem 検印更新情報リストを指定します。\r\n * @returns 検印情報を返します。\r\n */\r\n public static toUpdateMaintenanceInspectedStampItem(listItem: UpdateInspectedStampListItem[]): InspectedStampItem | null {\r\n if (!listItem.length) {\r\n return null;\r\n } else {\r\n const item = listItem[0];\r\n const result: InspectedStampItem = {\r\n reportNo: item.reportNo,\r\n reportAt: item.reportAt, // BE 不要\r\n inspector: item.status === StampUpdateStaus.Stamp ? item.inspector : void 0, // BE 検印する場合は null or empty。 差し戻す場合は null。\r\n firstTeamLeader: ConstructionMacineMasterUtility.getInspecterName(InspecterType.FirstTeamLeader, listItem),\r\n completeTeamLeader: ConstructionMacineMasterUtility.getInspecterName(InspecterType.CompleteTeamLeader, listItem),\r\n firstManager: ConstructionMacineMasterUtility.getInspecterName(InspecterType.FirstManager, listItem),\r\n completeManager: ConstructionMacineMasterUtility.getInspecterName(InspecterType.CompleteManager, listItem),\r\n exist: item.exist, // BE 不使用\r\n isStamped: item.isStampAfter, // BE 不使用\r\n }\r\n return result\r\n }\r\n }\r\n\r\n /**\r\n * 検印者名を取得します。\r\n * @param inspecterType\r\n * @param source\r\n */\r\n private static getInspecterName(inspecterType: InspecterType, source: UpdateInspectedStampListItem[]): string | undefined {\r\n const inspecterItem = source.find(item => item.key === inspecterType)\r\n // Inspecter に検印者名が格納されている\r\n // 差し戻しの場合は null を返す\r\n const result = inspecterItem?.status === StampUpdateStaus.SendBack ? void 0 : inspecterItem?.inspector\r\n return result;\r\n }\r\n\r\n\r\n //#endregion メソッド\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { FormControl, TextField, MenuItem, Divider, FormGroup, FormControlLabel, FormLabel, Checkbox, FormHelperText, Box } from '@material-ui/core';\r\nimport { KeyValueItem } from '../../../../../_types';\r\nimport { InspectedStampItem, UpdateInspectedStampListItem, InspecterType } from '../../../_types';\r\nimport MuiBackToListButton from '../../../../../components/Buttons/MuiBackToListButton';\r\nimport MuiUpdateButton from '../../../../../components/Buttons/MuiUpdateButton';\r\nimport InspectionConfirmDialog from '../../../Shared/components/ComfirmDialog/InspectionStampConfirmDialog';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\nimport AccountBoxIcon from '@material-ui/icons/AccountBox';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // 区切り線\r\n divider: {\r\n marginBottom: theme.spacing(4),\r\n },\r\n // 検印者\r\n inspector: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '1.25rem',\r\n },\r\n // 検印者名\r\n name: {\r\n margin: 'auto',\r\n }\r\n }),\r\n);\r\n\r\n/** 整備記録の検印エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 検印者名を表します。 */\r\n inspector: string;\r\n /** 検印情報を表します。 */\r\n stampDatas: KeyValueItem[],\r\n /** 更新ボタンのクリック処理を表します。 */\r\n onUpdateClick: (inputItems: UpdateInspectedStampListItem[]) => void,\r\n /** 戻るボタンのクリック処理を表します。 */\r\n onBackClick: () => void,\r\n /** 帳票が更新されたかどうかを表します。 */\r\n isUpdated: boolean,\r\n}\r\n\r\n/**\r\n * State の初期化を行います。\r\n * @param source 検印情報を指定します。\r\n * @returns 配列を返します。\r\n */\r\nconst initState = (source: KeyValueItem[]): InspecterType[] => {\r\n\r\n return source.reduce((result: InspecterType[], item) => {\r\n if (item.value.exist && item.value.isStamped) {\r\n result.push(item.key);\r\n }\r\n return result;\r\n }, []);\r\n}\r\n\r\n/** 検印選択エリアを表示します。*/\r\nconst InspectionStampForm: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** ダイアログの開閉状態を表します。 */\r\n const [open, setOpen] = React.useState(false);\r\n\r\n /** 検印選択情報を表します。 */\r\n const [checkedValues, setCheckedValues] = React.useState(initState(props.stampDatas));\r\n\r\n useEffect(() => {\r\n if (props.isUpdated) {\r\n setOpen(false);\r\n }\r\n }, [props.isUpdated])\r\n\r\n useEffect(() => {\r\n setCheckedValues(initState(props.stampDatas));\r\n }, [props.stampDatas])\r\n\r\n /**\r\n * チェックボックスの選択処理を行います。\r\n * @param checkedId チェックされたキーを指定します。\r\n */\r\n const handleSelect = (checkedId: InspecterType ) => {\r\n const newIds = checkedValues?.includes(checkedId)\r\n ? checkedValues?.filter(val => val !== checkedId)\r\n : [...(checkedValues ?? []), checkedId];\r\n\r\n setCheckedValues(newIds);\r\n }\r\n\r\n /** ダイアログを開きます。 */\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n /** ダイアログを閉じます。 */\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n /**\r\n * 更新処理を行います。\r\n */\r\n const onUpdateExecute = () => {\r\n props.onUpdateClick(ConstructionMacineMasterUtility.convertMaintenanceListItem(props.stampDatas, checkedValues, props.inspector));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {/* 戻るボタン */}\r\n \r\n\r\n \r\n\r\n {/* 検印者 */}\r\n \r\n 検印者\r\n \r\n
\r\n \r\n \r\n {props.inspector}\r\n \r\n
\r\n\r\n {/* 検印選択 */}\r\n \r\n \r\n 検印選択\r\n \r\n \r\n {props.stampDatas.map((data, index) =>\r\n handleSelect(data.key)}\r\n />\r\n }\r\n />\r\n )}\r\n \r\n \r\n\r\n {/* 更新ボタン */}\r\n \r\n\r\n
\r\n\r\n\r\n {/* 確認ダイアログ */}\r\n {(props.stampDatas && open) &&\r\n \r\n }\r\n\r\n \r\n );\r\n}\r\n\r\nexport default InspectionStampForm;\r\n","/** 施工記録の入力情報のインターフェイスを提供します。 */\r\nexport interface MachineOperationHistoryInputItem {\r\n /** 社番 を表します。 */\r\n machineId: string;\r\n /** 開始日 を表します。 */\r\n readonly beginAt: Date | null;\r\n /** 終了日 を表します。 */\r\n readonly endAt: Date | null;\r\n}\r\n\r\n/** 施工記録のグラフ項目のインターフェイスを提供します。 */\r\nexport interface MachineOperationHistoryGraphItem {\r\n /** エンジン稼働時間を表します。 */\r\n readonly engineOperatingTime: string;\r\n /** 昇降距離を表します。 */\r\n readonly liftingDistance: string;\r\n /** 平均エンジン回転数を表します。 */\r\n readonly engineRotationTimeAvg: string;\r\n /** 平均バッテリー電圧を表します。 */\r\n readonly batteryVoltageAvg: string;\r\n /** 最大昇降圧力を表します。 */\r\n readonly liftingPressureMax: string;\r\n /** 平均作動油温度を表します。 */\r\n readonly oilTemperatureAvg: string;\r\n /** エラー一覧を表します。*/\r\n readonly errors: string[];\r\n /** 対象日を表します。 */\r\n readonly dateAt: string;\r\n}\r\n\r\n/** 施工記録のグラフ表示用項目のインターフェイスを提供します。 */\r\nexport interface MachineOperationHistoryGraphDisplayData {\r\n /** エンジン稼働時間を表します。 */\r\n readonly engineOperatingTime?: number;\r\n /** 昇降距離を表します。 */\r\n readonly liftingDistance?: number;\r\n /** 平均エンジン回転数を表します。 */\r\n readonly engineRotationTimeAvg?: number;\r\n /** 平均バッテリー電圧を表します。 */\r\n readonly batteryVoltageAvg?: number;\r\n /** 最大昇降圧力を表します。 */\r\n readonly liftingPressureMax?: number;\r\n /** 平均作動油温度を表します。 */\r\n readonly oilTemperatureAvg?: number;\r\n /** エラー一覧を表します。*/\r\n readonly errors?: string;\r\n /** 対象日を表します。 */\r\n readonly dateAt: number;\r\n}\r\n\r\n/** グラフ項目の列挙値を表します。 */\r\nexport enum GraphType {\r\n /** Hr メーターを表します。 */\r\n engineOperatingTime = 1,\r\n /** 昇降距離を表します。 */\r\n liftingDistance = 2,\r\n /** 平均エンジン回転数を表します。 */\r\n engineRotationTimeAvg = 3,\r\n /** 平均バッテリー電圧を表します。 */\r\n batteryVoltageAvg = 4,\r\n /** 最大昇降圧力を表します。 */\r\n liftingPressureMax = 5,\r\n /** 平均作動油温度を表します。 */\r\n oilTemperatureAvg = 6,\r\n}\r\n\r\n/** グラフ オプション のインターフェイスを提供します。 */\r\nexport interface GraphOptionString {\r\n /** データキーを表します。*/\r\n readonly dataKey: keyof MachineOperationHistoryGraphDisplayData,\r\n /** 名称を表します。*/\r\n readonly name: string,\r\n /** 単位を表します。 */\r\n readonly unit: string,\r\n /** グラデーションhtmlタグの Id を表します。 */\r\n readonly htmlId: keyof MachineOperationHistoryGraphDisplayData, // ユニークである文字列が必要。\r\n /** カラーを表します。 */\r\n readonly color: string,\r\n /** コントラストカラーを表します。 */\r\n readonly contrastColor: string,\r\n}\r\n\r\n/** 施工記録項目一覧のインターフェイスを提供します。*/\r\nexport interface MachineOperationHistoryList {\r\n /** Hr メーターを表します。 */\r\n readonly engineOperatingTime: GraphOptionString,\r\n /** 昇降距離を表します。 */\r\n readonly liftingDistance: GraphOptionString,\r\n /** 平均エンジン回転数を表します。 */\r\n readonly engineRotationTimeAvg: GraphOptionString,\r\n /** 平均バッテリー電圧を表します。 */\r\n readonly batteryVoltageAvg: GraphOptionString,\r\n /** 最大昇降圧力を表します。 */\r\n readonly liftingPressureMax: GraphOptionString,\r\n /** 平均作動油温度を表します。 */\r\n readonly oilTemperatureAvg: GraphOptionString,\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { MaintenanceRecordSlice, onUpdateMaintenanceInspectedStampAsync } from '../../../../../modules/slice/maintenance-record/maintenance-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport InspectionStampForm from './InspectionStampForm';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\nimport { UpdateInspectedStampListItem, InspecterType, InspectedStampItem } from '../../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n\r\n/** 整備記録画面 検印エリアを表示します。 */\r\nexport const StampContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const inspector = useSelector((state: RootState) => state.authentication?.user?.inspectorName ?? \"\");\r\n const inspectionStampItems: KeyValueItem[] = useSelector((state: RootState) => state.maintenanceRecord?.report?.stampItems ?? []);\r\n const selectedItem = useSelector((state: RootState) => state.maintenanceRecord?.selectedItem);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.maintenanceRecord?.isUpdated ?? false);\r\n\r\n /** 検印ボタンのクリック処理を行います。 */\r\n const onUpdateClick = async (inputItems: UpdateInspectedStampListItem[]) => {\r\n\r\n // 更新用パラメータ成型\r\n const updateItem = ConstructionMacineMasterUtility.toUpdateMaintenanceInspectedStampItem(inputItems);\r\n if (!machine) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"施工機情報がありません。\"));\r\n } else if (!inspector) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"検印者情報がありません。\"));\r\n } else if (!selectedItem) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"選択項目の情報がありません。\"));\r\n } else if (!inspectionStampItems.length) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"帳票情報がありません。\"));\r\n } else if (!updateItem) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"検印更新情報がありません。\"));\r\n } else {\r\n // 検印更新\r\n dispatch(onUpdateMaintenanceInspectedStampAsync(\r\n {\r\n machineType: machine.type,\r\n item: updateItem,\r\n },\r\n {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n reportAt: selectedItem.completionDate,\r\n reportNo: selectedItem.no,\r\n }\r\n ))\r\n }\r\n };\r\n\r\n /** 戻るボタンのクリック処理を行います。 */\r\n const onBackClick = () => {\r\n // ビューワを閉じる\r\n dispatch(MaintenanceRecordSlice.actions.toggleViewre(false));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { Component } from 'react';\r\nimport \"@grapecity/ar-viewer-ja/dist/jsViewer.min.js\";\r\nimport \"@grapecity/ar-viewer-ja/dist/jsViewer.min.css\";\r\nimport './style/style.css';\r\n\r\n// `グローバル変数の使用` について、\r\n// @types で型宣言ファイルを用意したが、Micorsoft の構文エラーが消えない。(ESLintはエラー無しで実行は出来る状態)\r\n// その為、モジュール内でグローバル変数を拡張し、エラー回避\r\n// 参考URL\r\n// https://create-react-app.dev/docs/using-global-variables/\r\n// https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation\r\n// https://dev.classmethod.jp/articles/typings-of-window-object/\r\n\r\n/**\r\n * グローバル変数\r\n */\r\ndeclare global {\r\n /**\r\n * Window のインターフェイスを提供します。\r\n * 既存の Window を拡張します。。\r\n * */\r\n interface Window {\r\n /** GrapeCity を表します。\r\n * e.g. window.GrapeCity.ActiveReports.JSViewer.create(\"#id\")\r\n */\r\n GrapeCity: any; // 型定義なし\r\n }\r\n}\r\n\r\n\r\n/**\r\n * ActiveReportViewer の Props を提供します。\r\n */\r\ninterface ActiveReportViewerProps {\r\n /** レポートのURLを表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport?: (() => void),\r\n}\r\n\r\n/**\r\n * ActiveReport の JS Viewer コンポーネントを提供します。\r\n */\r\nexport class ActiveReportViewer extends Component {\r\n\r\n // `Javascript で JSViewer の操作`\r\n // https://docs.grapecity.com/help/activereports-14/using-js-viewer.html#\r\n //\r\n /** ビューワを表します。 */\r\n private viewer: any;\r\n\r\n /** ビューワのID属性を表します。 */\r\n private readonly viewerId = \"viewer\";\r\n\r\n\r\n /** カスタムボタン活性状態のツールバーレイアウトを表します。 */\r\n private readonly exportEnabledLayout = [\r\n '$navigation', // ページ移動\r\n '$split',\r\n '$mousemode', // 移動\r\n '$zoom', // ズーム\r\n '$fullscreen', // フルスクリーン\r\n '$split',\r\n '$singlepagemode', // 単一ページ\r\n '$continuousmode', // 連続ページ\r\n '$split',\r\n '$print',\r\n '$exportEnabled', // カスタムボタン エクスポート\r\n ];\r\n\r\n /** カスタムボタン非活性状態のツールバーレイアウトを表します。 */\r\n private readonly exportDisabledLayout = [\r\n '$navigation', // ページ移動\r\n '$split',\r\n '$mousemode', // 移動\r\n '$zoom', // ズーム\r\n '$fullscreen', // フルスクリーン\r\n '$split',\r\n '$singlepagemode', // 単一ページ\r\n '$continuousmode', // 連続ページ\r\n '$split',\r\n '$print',\r\n '$exportDisabled', // カスタムボタン エクスポート\r\n ];\r\n\r\n\r\n /**\r\n * コンストラクタ\r\n * @param props Propsを指定します。\r\n */\r\n constructor(props: ActiveReportViewerProps) {\r\n super(props);\r\n\r\n }\r\n\r\n /**\r\n * コンポーネントのマウント後の処理を行います。\r\n */\r\n componentDidMount() {\r\n try {\r\n // Do something that could throw\r\n\r\n // ビューワ初期化\r\n this.viewer = window.GrapeCity.ActiveReports.JSViewer.create({\r\n element: `#${this.viewerId}`,\r\n reportID: this.props.reportUrl,\r\n documentLoaded: (reportInfo: any) => {\r\n if (this.props.loadedReport != null) {\r\n // 親コンポーネントのロード後処理実施\r\n this.props.loadedReport();\r\n }\r\n // 活性ボタンを表示\r\n this.viewer.toolbar.desktop.layout(this.exportEnabledLayout);\r\n this.viewer.toolbar.fullscreen.layout(this.exportEnabledLayout);\r\n this.viewer.toolbar.mobile.layout(this.exportEnabledLayout);\r\n },\r\n reportLoaded: () => {\r\n },\r\n error: (error: any) => {\r\n const viewer = this.viewer\r\n console.log(\"viewer_error\", { error }, { viewer });\r\n if (this.props.loadedReport != null) {\r\n // 親コンポーネントのロード後処理実施\r\n this.props.loadedReport();\r\n }\r\n }\r\n });\r\n\r\n // サイドバー非表示\r\n this.viewer.sidebar.toggle(false);\r\n\r\n // 非活性ボタン\r\n const exportDisabledButton = {\r\n key: '$exportDisabled',\r\n title: \"ダウンロード\",\r\n iconCssClass: 'custom-print-disabled',\r\n enabled: false,\r\n }\r\n // 活性ボタン\r\n const viewer = this.viewer\r\n const reportName = this.props.reportUrl.match(/([^/]*)\\./)\r\n const exportEnabledButton = {\r\n key: '$exportEnabled',\r\n iconCssClass: \"custom-print\",\r\n title: \"ダウンロード\",\r\n action: function (item: any) {\r\n if (reportName != null && reportName.length > 0) {\r\n viewer.export('Pdf', null, true, { FileName: reportName[1] + \".pdf\" }) // Reports/XXXXX.rdlx -> XXXXX.pdf\r\n }\r\n }\r\n }\r\n\r\n this.viewer.toolbar.desktop.removeItem('$exportDisabled')\r\n this.viewer.toolbar.fullscreen.removeItem('$exportDisabled')\r\n this.viewer.toolbar.mobile.removeItem('$exportDisabled')\r\n this.viewer.toolbar.desktop.addItem(exportDisabledButton);\r\n this.viewer.toolbar.fullscreen.addItem(exportDisabledButton);\r\n this.viewer.toolbar.mobile.addItem(exportDisabledButton);\r\n\r\n this.viewer.toolbar.desktop.removeItem('$exportEnabled')\r\n this.viewer.toolbar.fullscreen.removeItem('$exportEnabled')\r\n this.viewer.toolbar.mobile.removeItem('$exportEnabled')\r\n this.viewer.toolbar.desktop.addItem(exportEnabledButton)\r\n this.viewer.toolbar.fullscreen.addItem(exportEnabledButton)\r\n this.viewer.toolbar.mobile.addItem(exportEnabledButton)\r\n\r\n // 非活性ボタンを表示\r\n this.viewer.toolbar.desktop.layout(this.exportDisabledLayout);\r\n this.viewer.toolbar.fullscreen.layout(this.exportDisabledLayout);\r\n this.viewer.toolbar.mobile.layout(this.exportDisabledLayout);\r\n\r\n // ビューモードを「連続ページ」に設定 single = 0 or continuous = 1 `ActiveReportsJS` 参考まで https://demo.grapecity.com/activereportsjs/api/classes/reportviewer.viewer.html#toolbar\r\n this.viewer._viewer.viewMode = 1;\r\n\r\n } catch (error) {\r\n console.log(\"componentDidMount_catch\", { error });\r\n // throw new Error(error.message ?? \"ActiveReportViewer componentDidMount Error\");\r\n if (this.props.loadedReport != null) {\r\n // 親コンポーネントのロード後処理実施\r\n this.props.loadedReport();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * DOM 更新後の処理を行います。\r\n * @param prevProps 更新前の Props を表します。\r\n * @param prevState 更新前の State を表します。\r\n */\r\n componentDidUpdate(prevProps: ActiveReportViewerProps) {\r\n\r\n try {\r\n if (!!prevProps.reportUrl && this.props.reportUrl !== prevProps.reportUrl) {\r\n // カスタムボタン\r\n const viewer = this.viewer\r\n const reportName = this.props.reportUrl.match(/([^/]*)\\./)\r\n const coustomButtonExport = {\r\n key: '$exportEnabled',\r\n iconCssClass: \"custom-print\",\r\n title: \"ダウンロード\",\r\n action: function (item: any) {\r\n if (reportName != null && reportName.length > 0) {\r\n viewer.export('Pdf', null, true, { FileName: reportName[1] + \".pdf\" }) // Reports/XXXXX.rdlx -> XXXXX.pdf\r\n }\r\n }\r\n }\r\n this.viewer.toolbar.desktop.removeItem('$exportEnabled')\r\n this.viewer.toolbar.fullscreen.removeItem('$exportEnabled')\r\n this.viewer.toolbar.mobile.removeItem('$exportEnabled')\r\n this.viewer.toolbar.desktop.addItem(coustomButtonExport)\r\n this.viewer.toolbar.fullscreen.addItem(coustomButtonExport)\r\n this.viewer.toolbar.mobile.addItem(coustomButtonExport)\r\n\r\n // 非活性ボタンを表示\r\n this.viewer.toolbar.desktop.layout(this.exportDisabledLayout);\r\n this.viewer.toolbar.fullscreen.layout(this.exportDisabledLayout);\r\n this.viewer.toolbar.mobile.layout(this.exportDisabledLayout);\r\n\r\n // レポート更新\r\n this.viewer.openReport(this.props.reportUrl);\r\n\r\n } else {\r\n\r\n }\r\n\r\n } catch (error) {\r\n console.log(\"componentDidUpdate_catch\", { error });\r\n if (this.props.loadedReport != null) {\r\n // 親コンポーネントのロード後処理実施\r\n this.props.loadedReport();\r\n }\r\n }\r\n\r\n }\r\n\r\n /**\r\n * コンポーネントのアンマウント前の処理を行います。\r\n * */\r\n componentWillUnmount() {\r\n // 処理なし\r\n }\r\n\r\n /**\r\n * レンダリング処理を行います。\r\n */\r\n render() {\r\n return (\r\n
\r\n );\r\n }\r\n}\r\n\r\n// #region Functional component\r\n\r\n// error : 指定されたHTMLが見つかりません\r\n// ビューワ生成時 の element id が指定出来ない。\r\n// Class Component でコーディング。\r\n\r\n//import * as React from 'react';\r\n//import { useEffect } from 'react';\r\n//import \"@grapecity/ar-viewer-ja/dist/jsViewer.min.js\";\r\n//import \"@grapecity/ar-viewer-ja/dist/jsViewer.min.css\";\r\n//import './style.css';\r\n\r\n//declare global {\r\n// /** Window のインターフェイスを提供します。 */\r\n// interface Window {\r\n// /** GrapeCity を表します。\r\n// * e.g. window.GrapeCity.ActiveReports.JSViewer.create(\"#id\")\r\n// */\r\n// GrapeCity: any;\r\n// }\r\n//}\r\n\r\n///**\r\n// * JS Viewer コンポーネント の Props を提供します。\r\n// */\r\n//interface ActiveReportViewerProps {\r\n// /** レポートのURLを表します。 */\r\n// reportUrl: string,\r\n//}\r\n\r\n\r\n///**\r\n// * ActiveReport の JS Viewer コンポーネントを提供します。\r\n// */\r\n//export function ActiveReportViewer(props: ActiveReportViewerProps) {\r\n\r\n// /** ビューワのID属性を表します。 */\r\n// const viewerId = \"viewer\";\r\n\r\n// useEffect(() => {\r\n\r\n// const viewer = window.GrapeCity.ActiveReports.JSViewer.create({\r\n// element: \"#viewerContainer\",\r\n// });\r\n// //レポート更新\r\n// viewer.openReport(props.reportUrl);\r\n\r\n// }, [props.reportUrl])\r\n\r\n// return (\r\n//
\r\n// );\r\n//}\r\n// #endregion Functional component\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { ActiveReportViewer } from '../../../../../components/ActiveReportViewer/ActiveReportViewer';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n viewer: {\r\n height: `calc(100vh - calc(64px + 48px + ${theme.spacing(8)}px))`, //ヘッダー, タブ, マージン分\r\n },\r\n }),\r\n);\r\n\r\n/** 帳票ビュアーの Prsop を提供します。 */\r\ninterface Props {\r\n /** レポートの url を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport?: (() => void),\r\n}\r\n\r\n/**\r\n * 帳票ビュアー(Active Report)画面を表します。\r\n */\r\nconst ReportViewer: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n {!!props.reportUrl && (\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default ReportViewer;\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport ReportViewer from '../../../Shared/components/ReportViewer/ReportViewer';\r\nimport { MaintenanceRecordSlice } from '../../../../../modules/slice/maintenance-record/maintenance-record-slice';\r\n\r\n/** 帳票ビューワを表示します。 */\r\nexport const ViewerContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const reportUrl: string = useSelector((state: RootState) => state.maintenanceRecord?.report?.reportUrl ?? \"\");\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(MaintenanceRecordSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Box, Collapse } from '@material-ui/core';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: \"100%\",\r\n },\r\n collapse: {\r\n width: \"100%\",\r\n },\r\n }),\r\n);\r\n\r\n/** 折りたたみ拡張レイアウトの Props を提供します。 */\r\ninterface Props {\r\n /** 開いているかどうかを表します。 */\r\n isExpanded: boolean\r\n /** デフォルトコンテンツを表します。 */\r\n defaultContent?: JSX.Element,\r\n /** 拡張コンテンツを表します。 */\r\n expandContent?: JSX.Element,\r\n};\r\n\r\n/** 折りたたみ拡張レイアウトを表示します。 */\r\nconst CollapseLayout: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n\r\n {/* デフォルトコンテンツ isExpanded が false なら 非表示 */}\r\n \r\n {props.defaultContent}\r\n \r\n\r\n {/* 拡張コンテンツ isExpanded が True なら 表示 */}\r\n \r\n {props.expandContent}\r\n \r\n\r\n \r\n\r\n );\r\n}\r\n\r\nexport default CollapseLayout;\r\n","import { MachineOperationHistoryGraphItem } from '../../../pages/ConstructionMachineMaster/ConstructionRecord/_types';\r\nimport { MachineOperationHistoryItem } from '../../swagger-clients';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `整備記録` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MachineOperationHistoryUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGraphItem(items?: MachineOperationHistoryItem[]): MachineOperationHistoryGraphItem[] {\r\n const result: MachineOperationHistoryGraphItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 不正値チェック\r\n if (source.registerAt == null) {\r\n continue;\r\n }\r\n\r\n // 日付文字変換\r\n const registerAt = new Date(source.registerAt);\r\n registerAt.setHours(0, 0, 0, 0);\r\n const dateAt = source.registerAt == null ? \"\" : SharedUtility.toDateString(registerAt);\r\n\r\n const item: MachineOperationHistoryGraphItem = {\r\n engineOperatingTime: source.engineOperatingTime ?? \"\",\r\n liftingDistance: source.liftingDistance ?? \"\",\r\n engineRotationTimeAvg: source.engineRotationTimeAvg ?? \"\",\r\n batteryVoltageAvg: source.batteryVoltageAvg ?? \"\",\r\n liftingPressureMax: source.liftingPressureMax ?? \"\",\r\n oilTemperatureAvg: source.oilTemperatureAvg ?? \"\",\r\n dateAt: dateAt,\r\n errors: source.errors ?? [],\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MachineOperationHistoryClient, GetMachineOperationHistoryInput, GetDocumentInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MachineOperationHistoryGetRequest, MachineOperationHistoryGetResult, MachineOperationHistoryGetCsvRequest, MachineOperationHistoryGetCsvResult } from './types';\r\nimport { MachineOperationHistoryUtility } from './machine-operation-history-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `整備記録` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MachineOperationHistoryAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MachineOperationHistoryAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: MachineOperationHistoryGetRequest): Promise {\r\n function createErrorResult(message?: string): MachineOperationHistoryGetResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetMachineOperationHistoryInput();\r\n input.init({\r\n machineId: parameter.item.machineId,\r\n beginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n endAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineOperationHistoryGetResult = {\r\n isError: false,\r\n items: MachineOperationHistoryUtility.toGraphItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * CSV の取得を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getCsvAsync(parameter: MachineOperationHistoryGetCsvRequest): Promise {\r\n function createErrorResult(message?: string): MachineOperationHistoryGetCsvResult {\r\n return {\r\n url: \"\",\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // memo kura: 実装 -> 関数不使用\r\n //// 取得\r\n //const name = new GetDocumentInput();\r\n //name.init({\r\n // beginAt: parameter.item.beginAt ?? void 0,\r\n // endAt: parameter.item.endAt ?? void 0,\r\n //});\r\n //const output = await this.client.getCsv(name);\r\n //if (output == null) {\r\n // return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n //}\r\n //else if (output.isError === true) {\r\n // return createErrorResult(output.errorMessage);\r\n //}\r\n\r\n // 正常\r\n const result: MachineOperationHistoryGetCsvResult = {\r\n isError: false,\r\n url: \"\",//output.url ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MachineOperationHistoryClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { GraphType } from '../../../pages/ConstructionMachineMaster/ConstructionRecord/_types'\r\n\r\n/**\r\n * `施工記録記録` Redux 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MachineOperationHistorySliceUtility {\r\n\r\n //#region フィールド\r\n\r\n /** 最大表示数を表します。 */\r\n public static readonly MaxDisplayCount = 2\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 配列に要素を追加します。\r\n * @param array\r\n * @param item\r\n */\r\n public static addItem(array: GraphType[], item: GraphType): GraphType[] {\r\n return Array.from(new Set([...array, item])); //重複データが入らないようにするための対応\r\n }\r\n\r\n /**\r\n * 配列の要素を削除します。\r\n * @param array\r\n * @param item\r\n */\r\n public static removeItem(array: GraphType[], item: GraphType): GraphType[] {\r\n return array.filter((value) => value !== item);\r\n }\r\n\r\n /**\r\n * 配列の先頭要素を削除します。\r\n * @param array\r\n * @param item\r\n */\r\n public static shiftArray(array: GraphType[]): GraphType[] {\r\n return array.slice(1);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n// shared\r\nimport { ExtendGenericState, createExtendGenericSlice } from '../shared/create-extend-generic-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\n// type\r\nimport { MachineOperationHistoryAdapter } from '../../adapter/machine-operation-history/machine-operation-history-adapter';\r\nimport { MachineOperationHistoryGetResult, MachineOperationHistoryGetRequest, MachineOperationHistoryGetCsvResult, MachineOperationHistoryGetCsvRequest } from '../../adapter/machine-operation-history/types';\r\nimport { GraphType } from '../../../pages/ConstructionMachineMaster/ConstructionRecord/_types'\r\nimport { MachineOperationHistorySliceUtility } from './machine-operation-history-slice-utility';\r\n\r\n/** 施工記録 結果情報の State を表します。 */\r\ninterface MachineOperationHistoryResultState {\r\n /** 一覧取得結果情報を表します。 */\r\n getResult?: MachineOperationHistoryGetResult,\r\n /** ドキュメント取得結果情報を表します。 */\r\n getCsvResult?: MachineOperationHistoryGetCsvResult,\r\n}\r\n\r\n/** 施工記録 アイテム情報の State を表します。 */\r\ninterface MachineOperationHistoryItemState {\r\n dataList: GraphType[];\r\n}\r\n\r\n\r\n// State の初期値を設定します。\r\nconst initialState: ExtendGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n getResult: {\r\n items: [],\r\n isError: false,\r\n },\r\n getCsvResult: {\r\n url: \"\",\r\n isError: false,\r\n }\r\n },\r\n item: {\r\n dataList: [GraphType.engineOperatingTime, GraphType.liftingDistance],\r\n }\r\n}\r\n\r\n/** 施工記録 Slice を 提供します。*/\r\nexport const MachineOperationHistorySlice = createExtendGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'MachineOperationHistory',\r\n initialState: initialState,\r\n reducers: {\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchEndExtension(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n\r\n if (action.payload.getResult) {\r\n state.result.getResult = action.payload.getResult;\r\n }\r\n if (action.payload.getCsvResult) {\r\n state.result.getCsvResult = action.payload.getCsvResult;\r\n }\r\n },\r\n\r\n /**\r\n * 表示するグラフを変更します。\r\n * @param state\r\n * @param action\r\n */\r\n onChangeDispayGraph(state: ExtendGenericState, action: PayloadAction) {\r\n\r\n if (state.item.dataList.includes(action.payload)) {\r\n // 配列にある場合\r\n if (state.item.dataList.length > 1)\r\n // 要素の削除\r\n state.item.dataList = MachineOperationHistorySliceUtility.removeItem(state.item.dataList, action.payload);\r\n\r\n } else {\r\n // 配列に無い場合\r\n // 末尾に追加\r\n state.item.dataList = MachineOperationHistorySliceUtility.addItem(state.item.dataList, action.payload);\r\n if (state.item.dataList.length > MachineOperationHistorySliceUtility.MaxDisplayCount) {\r\n // 最大表示数は 2\r\n // 先頭削除\r\n state.item.dataList = MachineOperationHistorySliceUtility.shiftArray(state.item.dataList);\r\n\r\n }\r\n\r\n }\r\n }\r\n },\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: MachineOperationHistoryGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineOperationHistorySlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = MachineOperationHistoryAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.item.machineId });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n dispatch(MachineOperationHistorySlice.actions.fetchEndExtension({ getResult: getResult }));\r\n\r\n\r\n if (getResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MachineOperationHistorySlice.actions.fetchEndExtension({\r\n getResult: {\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineOperationHistorySlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * CSV取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetCsvAsync = (parameter: MachineOperationHistoryGetCsvRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineOperationHistorySlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result: MachineOperationHistoryGetCsvResult = {\r\n url: \"\",\r\n isError: false,\r\n }\r\n\r\n // 通信終了\r\n dispatch(MachineOperationHistorySlice.actions.fetchEndExtension({ getCsvResult: result }));\r\n\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showSuccessMessage());\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MachineOperationHistorySlice.actions.fetchEndExtension({\r\n getCsvResult: {\r\n url: \"\",\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MachineOperationHistorySlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineOperationHistorySlice.actions.fetchEnd());\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Box, Card } from '@material-ui/core';\r\n\r\ninterface Props {\r\n // カードリストコンテンツを表します。\r\n cards: React.ReactNode,\r\n // グラフコンテンツを表します。\r\n graph: React.ReactNode,\r\n // ダウンロードボタンを表します。\r\n csvButton: React.ReactNode,\r\n}\r\n\r\n/**\r\n * 施工記録 画面を表示します。\r\n * */\r\nexport const ConstructionRecordMain: React.FC = (props) => {\r\n\r\n return (\r\n \r\n {/* カードリスト(稼働時間・昇降距離) */}\r\n {props.cards}\r\n\r\n {/* グラフ */}\r\n \r\n \r\n {/* ボタン */}\r\n {props.csvButton}\r\n\r\n {/* グラフ描画 */}\r\n {props.graph}\r\n\r\n \r\n \r\n \r\n\r\n\r\n )\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Box from '@material-ui/core/Box';\r\n// type\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n }),\r\n);\r\n\r\n/** 施工記録画面 検索エリアの State を表示します。 */\r\nexport interface ConstructionRecordSerachState {\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n}\r\n\r\n/** 施工記録画面 検索エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (event: React.MouseEvent, inputItem: ConstructionRecordSerachState) => void\r\n}\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n * */\r\nconst initState = (): ConstructionRecordSerachState => {\r\n\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n\r\n const result: ConstructionRecordSerachState = {\r\n beginAt: beginAt,\r\n endAt: new Date(),\r\n }\r\n\r\n return result;\r\n}\r\n\r\n\r\n/** 施工記録画面 検索エリアを提供します。*/\r\nconst ConstructionRecordSearch: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** useState を提供します。*/\r\n const [values, setValues] = useState(initState());\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(date)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(date)}\r\n />\r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(event, values)}\r\n />\r\n
\r\n \r\n );\r\n\r\n};\r\n\r\nexport default ConstructionRecordSearch;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/machine-operation-history/machine-operation-history-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\n// compoent\r\nimport ConstructionRecordSearch, { ConstructionRecordSerachState } from './ConstructionRecordSearch'\r\n// type\r\nimport { MachineOperationHistoryInputItem } from '../../_types';\r\n\r\n\r\n/** 施工記録画面 検索エリアを提供します。*/\r\nexport const ConstructionRecordSerchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (event: React.MouseEvent, inputItem: ConstructionRecordSerachState) => {\r\n\r\n if (machine) {\r\n\r\n // 実行\r\n await dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n beginAt: inputItem.beginAt,\r\n endAt: inputItem.endAt,\r\n }\r\n }));\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ButtonBase from '@material-ui/core/ButtonBase';\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\r\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタンベース\r\n buttonBase: {\r\n height: \"100%\",\r\n },\r\n // カード全体\r\n card: {\r\n position: \"relative\",\r\n display: \"block\",\r\n width: \"240px\",\r\n color: \"#fafafa\", // デフォルトは白固定\r\n backgroundColor: theme.palette.text.disabled,\r\n height: \"100%\",\r\n minHeight: \"100px\",\r\n },\r\n // カード全体 アクティブ\r\n cardActive: (props: Props) => ({\r\n backgroundColor: props.backgroundColor ?? \"\",\r\n }),\r\n cardContent: {\r\n display: \"flex\",\r\n height: \"100%\",\r\n },\r\n // タイトル\r\n title: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n textAlign: \"start\",\r\n fontSize: \"1.3rem\",\r\n zIndex: 2,\r\n },\r\n // タイトル アクティブ\r\n titleActive: (props: Props) => ({\r\n color: props.titleColor ?? \"#fafafa\",\r\n }),\r\n // アイコン\r\n icon: {\r\n '& svg': {\r\n fontSize: \"5rem\",\r\n },\r\n opacity: 0.3,\r\n zIndex: 1,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"60%\",\r\n transform: \"translateY(-50%)\",\r\n },\r\n // アイコン アクティブ\r\n iconActive: (props: Props) => ({\r\n '& svg': {\r\n color: props.iconColor ?? \"#fafafa\",\r\n },\r\n }),\r\n }),\r\n);\r\n\r\n/** 計測結果カードの Props を提供します。 */\r\ninterface Props {\r\n /** タイトルを表します。 */\r\n title: string[],\r\n /** ローディング中かどうかを表します。 */\r\n isLoading: boolean,\r\n /** アクティブかどうかを表します。 */\r\n isActive: boolean,\r\n /** アイコンを表します。 */\r\n icon?: React.ReactNode,\r\n /** タイトルの文字の色を表します。 */\r\n titleColor?: string,\r\n /** 背景の色を表します。 */\r\n backgroundColor?: string,\r\n /** アイコンの色を表します。 */\r\n iconColor?: string,\r\n /** クリック時の処理を表します。 */\r\n onClick: () => void,\r\n};\r\n\r\n/**\r\n * グラフ表示項目選択カードを提供します。\r\n * @param props\r\n */\r\nconst GraphSelectCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n {/* チェックボックスアイコン */}\r\n {props.isActive ? () : ()}\r\n
\r\n {/* タイトル */}\r\n {props.title.map((text, index) => {\r\n return
{text}
\r\n })}\r\n
\r\n\r\n
\r\n\r\n
\r\n {/* アイコン */}\r\n \r\n {props.icon}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default GraphSelectCard;\r\n","import * as React from 'react';\r\nimport { AreaProps, YAxisProps } from 'recharts';\r\nimport { GraphType, GraphOptionString, MachineOperationHistoryList, MachineOperationHistoryGraphItem, MachineOperationHistoryGraphDisplayData } from '../../_types'\r\n\r\n/**\r\n * 施工記録グラフ 関連の ユーティリティ機能を提供します。\r\n * */\r\nexport class GraphContentUtility {\r\n //#region フィールド\r\n\r\n /** 施工記録項目一覧を表します。 */\r\n static readonly constantString: MachineOperationHistoryList = {\r\n engineOperatingTime: {\r\n dataKey: \"engineOperatingTime\",\r\n name: \"エンジン稼働時間\",\r\n unit: \"Hr\",\r\n htmlId: \"engineOperatingTime\",\r\n color: \"#007aff\",\r\n contrastColor: \"#FFFFFF\",\r\n\r\n },\r\n liftingDistance: {\r\n dataKey: \"liftingDistance\",\r\n name: \"クレーン昇降距離\",\r\n unit: \"m\",\r\n htmlId: \"liftingDistance\",\r\n color: \"#ff9500\",\r\n contrastColor: \"#000000\",\r\n },\r\n engineRotationTimeAvg: {\r\n dataKey: \"engineRotationTimeAvg\",\r\n name: \"平均エンジン回転数(日)\",\r\n unit: \"rpm\",\r\n htmlId: \"engineRotationTimeAvg\",\r\n color: \"#34c759\",\r\n contrastColor: \"#FFFFFF\",\r\n },\r\n batteryVoltageAvg: {\r\n dataKey: \"batteryVoltageAvg\",\r\n name: \"平均バッテリー電圧(日)\",\r\n unit: \"V\",\r\n htmlId: \"batteryVoltageAvg\",\r\n color: \"#5856d6\",\r\n contrastColor: \"#FFFFFF\",\r\n },\r\n liftingPressureMax: {\r\n dataKey: \"liftingPressureMax\",\r\n name: \"最大昇降圧力(日)\",\r\n unit: \"Mpa\",\r\n htmlId: \"liftingPressureMax\",\r\n color: \"#ff2d54\",\r\n contrastColor: \"#FFFFFF\",\r\n },\r\n oilTemperatureAvg: {\r\n dataKey: \"oilTemperatureAvg\",\r\n name: \"平均作動油温度(日)\",\r\n unit: \"℃\",\r\n htmlId: \"oilTemperatureAvg\",\r\n color: \"#af52de\",\r\n contrastColor: \"#FFFFFF\",\r\n },\r\n }\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * グラフオプションに変換します。\r\n * @param type\r\n */\r\n public static graphOption(type: GraphType): GraphOptionString | undefined {\r\n const result: GraphOptionString | undefined =\r\n type === GraphType.engineOperatingTime ? GraphContentUtility.constantString.engineOperatingTime :\r\n type === GraphType.liftingDistance ? GraphContentUtility.constantString.liftingDistance :\r\n type === GraphType.engineRotationTimeAvg ? GraphContentUtility.constantString.engineRotationTimeAvg :\r\n type === GraphType.batteryVoltageAvg ? GraphContentUtility.constantString.batteryVoltageAvg :\r\n type === GraphType.liftingPressureMax ? GraphContentUtility.constantString.liftingPressureMax :\r\n type === GraphType.oilTemperatureAvg ? GraphContentUtility.constantString.oilTemperatureAvg :\r\n void 0;\r\n return result;\r\n }\r\n\r\n\r\n\r\n /**\r\n *グラフ用データを変換します。\r\n * @param dataSource\r\n */\r\n public static toGraphData = (dataSource: MachineOperationHistoryGraphItem[]) => {\r\n\r\n const result = dataSource\r\n .filter(item => item.dateAt != null)\r\n .map((item) => {\r\n let graphData: MachineOperationHistoryGraphDisplayData\r\n graphData = {\r\n // 対象日 ミリ秒に変換\r\n dateAt: new Date(item.dateAt).getTime(),\r\n // エラー一覧\r\n errors: item.errors.length ? item.errors.join(\"\\n\") : void 0,\r\n\r\n /* 以下、値を `!value` で null & 空文字チェック */\r\n\r\n // エンジン稼働時間\r\n engineOperatingTime: !item.engineOperatingTime ? void 0 : parseInt(item.engineOperatingTime, 10),\r\n // 昇降距離\r\n liftingDistance: !item.liftingDistance ? void 0 : parseInt(item.liftingDistance, 10),\r\n // 平均エンジン回転数\r\n engineRotationTimeAvg: !item.engineRotationTimeAvg ? void 0 : parseInt(item.engineRotationTimeAvg, 10),\r\n // 平均バッテリー電圧\r\n batteryVoltageAvg: !item.batteryVoltageAvg ? void 0 : parseInt(item.batteryVoltageAvg, 10),\r\n // 最大昇降圧力\r\n liftingPressureMax: !item.liftingPressureMax ? void 0 : parseInt(item.liftingPressureMax, 10),\r\n // 平均作動油温度\r\n oilTemperatureAvg: !item.oilTemperatureAvg ? void 0 : parseInt(item.oilTemperatureAvg, 10),\r\n }\r\n return graphData;\r\n })\r\n .sort((a, b) => (a.dateAt - b.dateAt)); // 時系列順にソート\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * グラフエリアのグラデーションを表示します。\r\n * @param props\r\n */\r\n public static GradientLine(props: GraphOptionString): JSX.Element {\r\n return (\r\n \r\n {/* グラデーション */}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n /**\r\n * カスタマイズしたドットを表示します。\r\n * @param props\r\n */\r\n public static CustomizedDot(props: any): JSX.Element {\r\n // payload -> グラフデータ、\r\n // value -> 配列 [1] に値 が格納されている\r\n const { payload, value, key, cx, cy, fill, fillOpacity, r, stroke, strokeWidth } = props;\r\n\r\n // 型アサーション\r\n const data = payload as MachineOperationHistoryGraphDisplayData;\r\n\r\n let result: JSX.Element;\r\n if (value[1] == null) {\r\n // データ無し(Dot無し)\r\n result =
;\r\n } else if (data.errors) {\r\n // エラー情報あり\r\n result = \r\n } else {\r\n // エラー情報なし\r\n result = ;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * アクティブ状態(マウスホバー時)のカスタマイズしたドットを表示します。\r\n * @param props\r\n */\r\n public static CustomizedActiveDot(props: any): JSX.Element {\r\n // payload -> グラフデータ、\r\n // value -> 配列 [1] に値 が格納されている\r\n const { payload, value, key, cx, cy, fill, fillOpacity, r, stroke, strokeWidth } = props;\r\n\r\n // 型アサーション\r\n const data = payload as MachineOperationHistoryGraphDisplayData;\r\n\r\n let result: JSX.Element;\r\n if (value[1] == null) {\r\n // データ無し(Dot無し)\r\n result =
;\r\n } else if (data.errors) {\r\n // エラー情報あり\r\n result = \r\n } else {\r\n // エラー情報なし\r\n result = \r\n }\r\n\r\n return result;\r\n }\r\n\r\n //#region Props 共通化\r\n\r\n // 共通化をトライしたが、表示グラフを選択変更した際、オプションが追従しない為、.tsx に直書き。\r\n\r\n ///**\r\n // * エリアのカラー用文字列に変換します。\r\n // * @param id\r\n // */\r\n //private static toGradientUrl(id: string) { return `url(#${id})` };\r\n\r\n ///**\r\n // * Y軸のタイトル文字に変換します。\r\n // * @param title\r\n // * @param unit\r\n // */\r\n //private static toYAxisLabel(title: string, unit: string) { return `${title} [${unit}]` };\r\n\r\n ///**\r\n // * エリアのオプションに変換します。\r\n // * @param item\r\n // */\r\n //public static toAreaProps(type: GraphType): AreaProps {\r\n // let result: AreaProps = { dataKey: \"\" };\r\n\r\n // const item = GraphContentUtility.graphOption(type);\r\n // if (item == null) return result;\r\n\r\n // result = {\r\n // dataKey: item.dataKey,\r\n // name: item.name,\r\n // unit: item.unit,\r\n // stroke: item.color,\r\n // fill: GraphContentUtility.toGradientUrl(item.htmlId),\r\n\r\n // }\r\n // return result;\r\n //}\r\n\r\n ///**\r\n // * Y軸のオプションに変換します。\r\n // * @param item\r\n // */\r\n //public static toYAxisProps(item: GraphOptionString): YAxisProps {\r\n // const result: YAxisProps = {\r\n // label: {\r\n // value: GraphContentUtility.toYAxisLabel(GraphContentUtility.constantString.engineOperatingTime.dataKey, GraphContentUtility.constantString.engineOperatingTime.unit),\r\n // fill: GraphContentUtility.constantString.engineOperatingTime.color,\r\n // },\r\n // tick: {\r\n // fill: GraphContentUtility.constantString.engineOperatingTime.color,\r\n // stroke: GraphContentUtility.constantString.engineOperatingTime.color,\r\n // },\r\n // stroke: GraphContentUtility.constantString.engineOperatingTime.color,\r\n // }\r\n // return result;\r\n //}\r\n\r\n //#endregion オプション共通化\r\n\r\n //#endregion メソッド\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// mateial-ui\r\nimport Grid from '@material-ui/core/Grid';\r\n// icons\r\nimport { MdAccessTime } from 'react-icons/md'\r\nimport { MdImportExport } from 'react-icons/md'\r\nimport { FaCogs } from 'react-icons/fa'\r\nimport { BsBatteryCharging } from 'react-icons/bs'\r\nimport { FaTachometerAlt } from 'react-icons/fa'\r\nimport { FaThermometerHalf } from 'react-icons/fa'\r\n// component\r\nimport GraphSelectCard from './GraphSelectCard';\r\nimport { GraphType } from '../../_types';\r\nimport { GraphContentUtility } from '../GraphContent/GraphContetntUtility';\r\n\r\n/** 施工記録画面 カードリストの Props を提供します。*/\r\ninterface Props {\r\n /** グラフ描画する項目を表します。*/\r\n activeCardList: GraphType[],\r\n /** カードボタンクリック時の処理を行います。*/\r\n onClickCard: (item: GraphType) => void,\r\n}\r\n\r\n/**\r\n * 施工記録画面 カードリストを提供します。\r\n * */\r\nexport const ConstructionRecordCardList: React.FC = (props) => {\r\n\r\n /**\r\n * 文字列を指定した位置で分割します\r\n * @param str 文字列を指定します。\r\n * @param length 分割する位置をしていします。\r\n * @returns 文字配列を返します。\r\n */\r\n const sliceByLength = (str: string, length: number): string[] => {\r\n let result: string[] = [];\r\n\r\n // 入力値が不正\r\n if (!str || !length || length < 1) return result;\r\n\r\n // 分割\r\n result.push(str.slice(0, length));\r\n result.push(str.slice(length));\r\n\r\n return result;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {/* Hrメーター */}\r\n \r\n }\r\n titleColor={GraphContentUtility.constantString.engineOperatingTime.contrastColor}\r\n backgroundColor={GraphContentUtility.constantString.engineOperatingTime.color}\r\n onClick={() => props.onClickCard(GraphType.engineOperatingTime)}\r\n\r\n />\r\n\r\n \r\n\r\n {/* 昇降距離 */}\r\n \r\n }\r\n titleColor={GraphContentUtility.constantString.liftingDistance.contrastColor}\r\n backgroundColor={GraphContentUtility.constantString.liftingDistance.color}\r\n onClick={() => props.onClickCard(GraphType.liftingDistance)}\r\n />\r\n \r\n\r\n {/* 平均エンジン回転数 */}\r\n \r\n }\r\n titleColor={GraphContentUtility.constantString.engineRotationTimeAvg.contrastColor}\r\n backgroundColor={GraphContentUtility.constantString.engineRotationTimeAvg.color}\r\n onClick={() => props.onClickCard(GraphType.engineRotationTimeAvg)}\r\n />\r\n \r\n\r\n {/* 平均バッテリー電圧離 */}\r\n \r\n }\r\n titleColor={GraphContentUtility.constantString.batteryVoltageAvg.contrastColor}\r\n backgroundColor={GraphContentUtility.constantString.batteryVoltageAvg.color}\r\n onClick={() => props.onClickCard(GraphType.batteryVoltageAvg)}\r\n />\r\n \r\n\r\n {/* 最大昇降圧力 */}\r\n \r\n }\r\n titleColor={GraphContentUtility.constantString.liftingPressureMax.contrastColor}\r\n backgroundColor={GraphContentUtility.constantString.liftingPressureMax.color}\r\n onClick={() => props.onClickCard(GraphType.liftingPressureMax)}\r\n />\r\n \r\n\r\n {/* 平均作動油温度 */}\r\n \r\n }\r\n titleColor={GraphContentUtility.constantString.oilTemperatureAvg.contrastColor}\r\n backgroundColor={GraphContentUtility.constantString.oilTemperatureAvg.color}\r\n onClick={() => props.onClickCard(GraphType.oilTemperatureAvg)}\r\n />\r\n \r\n \r\n
\r\n\r\n );\r\n};\r\n","/** 施工機ステータスの昇降状態の列挙値を提供します。 */\r\nexport enum MachineStatusMonitoringUpDownState {\r\n /** 利用不可 を表します。*/\r\n NotAvailable = 0,\r\n /** 停止状態 を表します。 */\r\n Stop = 1,\r\n /** 上昇状態 を表します。 */\r\n Up = 2,\r\n /** 下降状態 を表します。 */\r\n Down = 3,\r\n}\r\n\r\n/** 施工機ステータスのON/OFF状態の列挙値を提供します。 */\r\nexport enum MachineStatusMonitoringBoolState {\r\n /** 利用不可 を表します。*/\r\n NotAvailable = 0,\r\n /** ON状態 を表します。*/\r\n On = 1,\r\n /** OFF状態 を表します。*/\r\n Off = 2,\r\n}\r\n\r\n/** 施工機データ種別を表す列挙値を提供します。 */\r\nexport enum MachineDataType {\r\n /** 自動制御接続を表します。*/\r\n AutoControlConnection = 1,\r\n /** 現在深度を表します。*/\r\n CurrentDepth = 2,\r\n /** 現在速度を表します。*/\r\n CurrentSpeed = 3,\r\n /** 昇降状態を表します。*/\r\n UpDownState = 4,\r\n /** 昇降圧力を表します。*/\r\n UpDownPressure = 5,\r\n /** 昇降速度設定ボリュームを表します。*/\r\n UpDownSpeedVolume = 6,\r\n /** 滑車ロードセル No1 を表します。*/\r\n LoadCell = 7,\r\n /** 非常停止状態を表します。*/\r\n EmergencyStopState = 8,\r\n /** エンジン回転数を表します。*/\r\n EngineRotateSpeed = 9,\r\n /** ECUエラーを表します。*/\r\n EcuError = 10,\r\n /** フロントジャッキ右圧力を表します。*/\r\n FrontRightJackPressure = 12,\r\n /** フロントジャッキ左圧力を表します。*/\r\n FrontLeftJackPressure = 13,\r\n /** リヤジャッキ右圧力を表します。*/\r\n RearRightJackPressure = 14,\r\n /** リヤジャッキ左圧力を表します。*/\r\n RearLeftJackPressure = 15,\r\n /** フック過巻を表します。*/\r\n HookOverHoisting = 16,\r\n /** 作動油温度を表します。*/\r\n WorkingOilTemp = 17,\r\n /** パイロット圧低下警告灯を表します。*/\r\n PilotPressureWarning = 18,\r\n /** エンジン冷却水オーバーヒートを表します。*/\r\n EngineCoolingWaterOverHeat = 19,\r\n /** FAULT ランプ出力を表します。*/\r\n FaultLamp = 20,\r\n /** 本体角度 X 軸を表します。*/\r\n BodyAngleX = 21,\r\n /** 本体角度 Y 軸を表します。*/\r\n BodyAngleY = 22,\r\n /** リーダー角度 X 軸を表します。*/\r\n LeaderAngleX = 23,\r\n /** リーダー角度 Y 軸を表します。*/\r\n LeaderAngleY = 24,\r\n /** ステーストローク長左を表します。*/\r\n LeftStayStrokeLength = 25,\r\n /** ステーストローク長右を表します。*/\r\n RightStayStrokeLength = 26,\r\n /** 作動油温度警報を表します。*/\r\n WorkingOilTempWarning = 27,\r\n /** 流量1 を設定または取得します。*/\r\n FlowRate1 = 28,\r\n /** 流量2 を設定または取得します。 */\r\n FlowRate2 = 29,\r\n /** 回転1 を設定または取得します。*/\r\n Rotate1 = 30,\r\n /** 回転2 を設定または取得します。*/\r\n Rotate2 = 31,\r\n /** 電流1 を設定または取得します。*/\r\n Current1 = 32,\r\n /** 電流2 を設定または取得します。*/\r\n Current2 = 33,\r\n /** バージョン情報を表します。*/\r\n Version = 34,\r\n /** バッテリー電圧を表します。*/\r\n BatteryVoltage = 35,\r\n /** 本体稼働時間を表します。*/\r\n TotalTime = 36,\r\n /** エンジン稼働時間を表します。*/\r\n EngineTotalTime = 37,\r\n /** メインポンプ稼働時間を表します。*/\r\n MainPumpTotalTime = 38,\r\n /** ギアポンプ稼働時間を表します。*/\r\n GearPumpTotalTime = 39,\r\n /** オーガー稼働時間1を表します。*/\r\n AugerTotalTime1 = 40,\r\n /** オーガー稼働時間2を表します。*/\r\n AugerTotalTime2 = 41,\r\n /** クレーン昇降距離を表します。*/\r\n CraneTotalDistance = 44,\r\n /** エンジン回転数の平均値を表します。*/\r\n EngineRotationTimeAvg = 45,\r\n /** バッテリー電圧の平均値を表します。*/\r\n BatteryVoltageAvg = 46,\r\n /** 昇降圧力の最大値を表します。*/\r\n LiftingPressureMax = 47,\r\n /** 作業油温の平均値を表します。*/\r\n OilTemperatureAvg = 48,\r\n /** 作動油交換後時間を表します。*/\r\n WorkingOilTime = 49,\r\n /** エンジンオイル交換後時間を表します。*/\r\n EngineOilTime = 50,\r\n /** オイルエレメント交換後時間を表します。*/\r\n OilElementTime = 51,\r\n /** エアーエレメント交換後時間を表します。*/\r\n AirElementTime = 52,\r\n /** 燃料エレメント交換後時間を表します。*/\r\n FuelElementTime = 53,\r\n /** 作動油エレメント交換後時間を表します。*/\r\n WorkingOilElementTime = 54,\r\n /** バッテリー交換後日数を表します。*/\r\n BatteryTime = 55,\r\n /** クーラント交換後日数を表します。*/\r\n CoolantTime = 56,\r\n /** ファンベルト交換後時間を表します。*/\r\n FanBeltTime = 57,\r\n /** オルタネーター交換後時間を表します。*/\r\n AlternatorTime = 58,\r\n /** セルモーター交換後時間を表します。*/\r\n StarterMotorTime = 59,\r\n /** 油圧ポンプカップリング交換後時間を表します。*/\r\n OilPressurePumpCouplingTime = 60,\r\n /** 油圧ポンプ減速機オイル交換後時間を表します。*/\r\n OilPressurePumpDeceleratorOilTime = 61,\r\n /** ウインチ減速機オイル交換後時間を表します。*/\r\n WinchDeceleratorOilTime = 62,\r\n /** 主巻ワイヤ交換後時間を表します。*/\r\n PrimaryHoistingWire = 63,\r\n /** 補巻ワイヤ交換後時間を表します。*/\r\n SubHoistingWire = 64,\r\n /** 起伏ワイヤ交換後時間を表します。*/\r\n UpsAndDownsWire = 65,\r\n /** ペンダントロープ交換後時間を表します。*/\r\n PendantRope = 66,\r\n /** 特定自主検査後日数を表します。*/\r\n SelfInspection = 67,\r\n /** バッテリー電圧警報を表します。*/\r\n AlarmBatteryVoltage = 68,\r\n}\r\n\r\n/** 施工機ステータスの管理計器ステータスの列挙値を提供します。 */\r\nexport enum MachineStatusControlMeterState {\r\n /**貫入を表します。*/\r\n Penetration = 1,\r\n /**打深を表します。*/\r\n Depth = 2,\r\n /**先端処理引抜を表します。*/\r\n TipPullOut = 3,\r\n /**先端処理打戻を表します。*/\r\n TipHitBack = 4,\r\n /**先端処理定置撹拌を表します。*/\r\n TipStir = 5,\r\n /**引抜を表します。*/\r\n PullOut = 6,\r\n /**再貫引抜を表します。*/\r\n RePenePullOut = 7,\r\n /**再貫打戻を表します。*/\r\n RePeneHitBack = 8,\r\n /**一時停止を表します。*/\r\n Stop = 9,\r\n /** 施工外を表します。 */\r\n Other = 50,\r\n}\r\n\r\n\r\n/** 施工機ステータスのインターフェイスを提供します。 */\r\nexport interface MachineStatusMonitoringItem {\r\n /** 自動制御接続 を表します。*/\r\n readonly autoControlConnection?: boolean;\r\n /** 現在深度[m] を表します。*/\r\n readonly currentDepth: string;\r\n /** 現在速度[m/min] を表します。*/\r\n readonly currentSpeed: string;\r\n /** 昇降状態 を表します。*/\r\n readonly upDownState?: MachineStatusMonitoringUpDownState;\r\n /** 昇降圧力[Mpa] を表します。*/\r\n readonly upDownPressure: string;\r\n /** 昇降速度設定ボリューム を表します。*/\r\n readonly upDownSpeedVolume: string;\r\n /** 滑車ロードセル No1 [t] を表します。*/\r\n readonly loadCell: string;\r\n /** 非常停止状態 を表します。*/\r\n readonly emergencyStopState?: MachineStatusMonitoringBoolState;\r\n /** エンジン回転数[rpm] を表します。*/\r\n readonly engineRotateSpeed: string;\r\n /** ECUエラー を表します。*/\r\n readonly ecuError?: MachineStatusMonitoringBoolState;\r\n /** フロントジャッキ右圧力[Mpa] を表します。*/\r\n readonly frontRightJackPressure: string;\r\n /** フロントジャッキ左圧力[Mpa] を表します。*/\r\n readonly frontLeftJackPressure: string;\r\n /** リヤジャッキ右圧力[Mpa] を表します。*/\r\n readonly rearRightJackPressure: string;\r\n /** リヤジャッキ左圧力[Mpa] を表します。*/\r\n readonly rearLeftJackPressure: string;\r\n /** フック過巻 を表します。*/\r\n readonly hookOverHoisting?: MachineStatusMonitoringBoolState;\r\n /** 作動油温度[度] を表します。*/\r\n readonly workingOilTemp: string;\r\n /** パイロット圧低下警告灯 を表します。*/\r\n readonly pilotPressureWarning?: MachineStatusMonitoringBoolState;\r\n /** エンジン冷却水オーバーヒート を表します。*/\r\n readonly engineCoolingWaterOverHeat?: MachineStatusMonitoringBoolState;\r\n /** FAULT ランプ出力 を表します。*/\r\n readonly faultLamp?: MachineStatusMonitoringBoolState;\r\n /** 本体角度 X 軸 [度] を表します。*/\r\n readonly bodyAngleX: string;\r\n /** 本体角度 Y 軸 [度] を表します。*/\r\n readonly bodyAngleY: string;\r\n /** リーダー角度 X 軸 [度] を表します。*/\r\n readonly leaderAngleX: string;\r\n /** リーダー角度 Y 軸 [度] を表します。*/\r\n readonly leaderAngleY: string;\r\n /** ステーストローク長左 [cm] を表します。*/\r\n readonly leftStayStrokeLength: string;\r\n /** ステーストローク長右 [cm] を表します。*/\r\n readonly rightStayStrokeLength: string;\r\n /** 作動油温度警報 を表します。*/\r\n readonly workingOilTempWarning?: MachineStatusMonitoringBoolState;\r\n /** CTUバージョン情報 を表します。*/\r\n readonly version: string;\r\n /** バッテリー電圧[V] を表します。*/\r\n readonly batteryVoltage: string;\r\n /** 流量1[ℓ/min] を表します。*/\r\n readonly flowRate1: string;\r\n /** 流量2[ℓ/min] を表します。*/\r\n readonly flowRate2: string;\r\n /** 回転1[rpm] を表します。*/\r\n readonly rotate1: string;\r\n /** 回転2[rpm] を表します。*/\r\n readonly rotate2: string;\r\n /** 電流1[A] を表します。*/\r\n readonly current1: string;\r\n /** 電流2[A] を表します。*/\r\n readonly current2: string;\r\n /** 本体稼働時間[Hr] を表します。*/\r\n readonly totalTime: string;\r\n /** エンジン稼働時間[Hr] を表します。*/\r\n readonly engineTotalTime: string;\r\n /** メインポンプ稼働時間[Hr] を表します。*/\r\n readonly mainPumpTotalTime: string;\r\n /** ギアポンプ稼働時間[Hr] を表します。*/\r\n readonly gearPumpTotalTime: string;\r\n /** オーガー稼働時間1 [Hr] を表します。*/\r\n readonly augerTotalTime1: string;\r\n /** オーガー稼働時間2 [Hr] を表します。*/\r\n readonly augerTotalTime2: string;\r\n /** クレーン昇降距離[m] を表します。*/\r\n readonly craneTotalDistance: string;\r\n /** 平均エンジン回転数[rpm]を表します。 */\r\n readonly engineRotationTimeAvg: string,\r\n /** 平均バッテリー電圧[V]を表します。 */\r\n readonly batteryVoltageAvg: string,\r\n /** 最大昇降圧力[Pa]を表します。 */\r\n readonly liftingPressureMax: string,\r\n /** 平均作動油温度[℃]を表します。 */\r\n readonly oilTemperatureAvg: string,\r\n /** バッテリー電圧警報を表します。*/\r\n readonly alarmBatteryVoltage?: MachineStatusMonitoringBoolState,\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MachineOperationHistorySlice } from '../../../../../modules/slice/machine-operation-history/machine-operation-history-slice';\r\n// component\r\nimport { GraphType } from '../../_types';\r\nimport { ConstructionRecordCardList } from './ConstructionRecordCardList';\r\n\r\n/**\r\n * 施工記録画面 カードリストを提供します。\r\n * */\r\nexport const ConstructionRecordCardListContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux state\r\n const activeCardList = useSelector((state: RootState) => state.machineOperationHistory.item.dataList);\r\n\r\n /**\r\n * 表示するグラフの変更処理を行います。\r\n * @param item\r\n */\r\n const onChangeCardState = (item: GraphType) => {\r\n\r\n dispatch(MachineOperationHistorySlice.actions.onChangeDispayGraph(item));\r\n\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { useTheme } from '@material-ui/core/styles';\r\nimport {\r\n AreaChart,\r\n XAxis,\r\n YAxis,\r\n CartesianGrid,\r\n Tooltip,\r\n Area,\r\n ResponsiveContainer,\r\n Brush,\r\n Label,\r\n} from 'recharts';\r\n\r\n// redux\r\nimport { GraphContentUtility } from './GraphContetntUtility'\r\nimport { MachineOperationHistoryGraphItem, MachineOperationHistoryGraphDisplayData, GraphOptionString } from '../../_types';\r\n\r\n/** 施工記録画面グラフの Props を提供します。 */\r\ninterface ConstructionRecordGraphProps {\r\n dataSource: MachineOperationHistoryGraphItem[]\r\n /** 左軸で描画する項目を表します。*/\r\n leftY?: GraphOptionString,\r\n /** 右軸で描画する項目を表します。*/\r\n rightY?: GraphOptionString,\r\n};\r\n\r\nexport const ConstructionRecordGraph: React.FC = (props) => {\r\n\r\n /** テーマを提供します。 */\r\n const theme = useTheme();\r\n\r\n const [graphData, setGraphData] = useState([]);\r\n\r\n useEffect(() => {\r\n\r\n setGraphData((GraphContentUtility.toGraphData(props.dataSource)))\r\n\r\n }, [props.dataSource])\r\n\r\n return (\r\n \r\n {\r\n props.dataSource == null\r\n ? (<>表示するデータがありません)\r\n : (\r\n \r\n {/* 格子 */}\r\n \r\n\r\n\r\n {/* X軸 */}\r\n new Date(unixTime).toLocaleDateString()}\r\n stroke={theme.palette.text.primary}\r\n interval={0}\r\n tick={{\r\n fontSize: \"0.75rem\",\r\n wordWrap: \"break-word\",\r\n fill: theme.palette.text.secondary,\r\n }}\r\n angle={-35}\r\n textAnchor=\"end\"\r\n />\r\n\r\n {/* ツールチップ */}\r\n new Date(unixTime).toLocaleDateString()}\r\n formatter={(value, name, entry) => {\r\n\r\n // エラー情報は改行して箇条書き表示\r\n if (entry.dataKey === \"errors\" && typeof value === \"string\") {\r\n return (\r\n <>{\r\n value.split(/\\r\\n|\\n|\\r/).map((text, index) => (\r\n
・{text}
\r\n ))\r\n }\r\n )\r\n } else {\r\n return <>{value}\r\n }\r\n }\r\n }\r\n />\r\n\r\n {/* ブラシ(下のバー) */}\r\n {/* データが0の場合エラーになる */}\r\n {props.dataSource.length > 0 &&\r\n new Date(unixTime).toLocaleDateString()}\r\n />\r\n }\r\n\r\n {/* エリアのグラデーション */}\r\n {GraphContentUtility.GradientLine(GraphContentUtility.constantString.engineOperatingTime)}\r\n {GraphContentUtility.GradientLine(GraphContentUtility.constantString.liftingDistance)}\r\n {GraphContentUtility.GradientLine(GraphContentUtility.constantString.engineRotationTimeAvg)}\r\n {GraphContentUtility.GradientLine(GraphContentUtility.constantString.batteryVoltageAvg)}\r\n {GraphContentUtility.GradientLine(GraphContentUtility.constantString.liftingPressureMax)}\r\n {GraphContentUtility.GradientLine(GraphContentUtility.constantString.oilTemperatureAvg)}\r\n\r\n\r\n {/* 左Y軸 */}\r\n \r\n \r\n \r\n\r\n {/* 右Y軸 */}\r\n \r\n \r\n \r\n\r\n {/* 左軸で描画する項目 */}\r\n {/* エリア */}\r\n {props.leftY &&\r\n \r\n }\r\n\r\n\r\n {/* 右軸で描画する項目 */}\r\n {/* エリア */}\r\n {props.rightY &&\r\n \r\n }\r\n\r\n\r\n {/* エラー情報 */}\r\n \r\n\r\n \r\n )\r\n }\r\n
\r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport { GraphContentUtility } from './GraphContetntUtility';\r\nimport { ConstructionRecordGraph } from './ConstructionRecordGraph';\r\n\r\n/**\r\n * 施工記録画面 グラフを提供します。\r\n * */\r\nexport const ConstructionRecordGraphContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const activeCardList = useSelector((state: RootState) => state.machineOperationHistory.item.dataList);\r\n const graphDataSource = useSelector((state: RootState) => state.machineOperationHistory.result.getResult?.items ?? []);\r\n\r\n return (\r\n 0 ? GraphContentUtility.graphOption(activeCardList[0]) : void 0}\r\n rightY={activeCardList.length > 1 ? GraphContentUtility.graphOption(activeCardList[1]) : void 0}\r\n />\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\nimport { MachineOperationHistoryGraphItem } from '../../_types';\r\nimport { CSVLink } from 'react-csv';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n csvLink: {\r\n \"&:hover\": {\r\n textDecoration: \"none\",\r\n\r\n }\r\n },\r\n }),\r\n);\r\n\r\n/** ダウンロードボタンの Props を提供します。 */\r\ninterface Props {\r\n /** グラフデータを表します。 */\r\n graphDataSource: MachineOperationHistoryGraphItem[],\r\n /** ボタンが有効かどうかを表します。 */\r\n isDisabled: boolean,\r\n}\r\n\r\n/** CSV ダウンロードボタンを表示します */\r\nconst DownloadButton: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** CSV ファイルの ヘッダーを表します。 */\r\n const headers: { label: string, key: keyof MachineOperationHistoryGraphItem }[] = [\r\n { label: \"日付\", key: \"dateAt\" },\r\n { label: \"エンジン稼働時間[Hr]\", key: \"engineOperatingTime\" },\r\n { label: \"クレーン昇降距離[m]\", key: \"liftingDistance\" },\r\n { label: \"平均エンジン回転数[rpm]\", key: \"engineRotationTimeAvg\" },\r\n { label: \"平均バッテリー電圧[V]\", key: \"batteryVoltageAvg\" },\r\n { label: \"最大昇降圧力[Mpa]\", key: \"liftingPressureMax\" },\r\n { label: \"平均作動油温度[℃]\", key: \"oilTemperatureAvg\" },\r\n { label: \"CTUエラー\", key: \"errors\" },\r\n ];\r\n\r\n /** CSV ファイルのファイル名を表します。 */\r\n const fileName = \"施工記録.csv\";\r\n\r\n return (\r\n\r\n \r\n {props.isDisabled ? (\r\n // Disabled ボタン\r\n }\r\n >\r\n CSVダウンロード\r\n \r\n ) : (\r\n //CSV ダウンロード\r\n \r\n }\r\n >\r\n CSVダウンロード\r\n \r\n \r\n )\r\n }\r\n\r\n \r\n );\r\n}\r\n\r\nexport default DownloadButton\r\n","import * as React from 'react';\r\n// redux\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport DownloadButton from './DownloadButton';\r\nimport { MachineOperationHistoryGraphItem } from '../../_types';\r\n\r\n/** CSV ダウンロードボタンを表示します */\r\nexport const DownloadButtonContainer: React.FC<{}> = () => {\r\n\r\n const graphDataSource: MachineOperationHistoryGraphItem[] = useSelector((state: RootState) => state.machineOperationHistory.result.getResult?.items ?? []);\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { MachineStatusMonitoringItem, MachineStatusMonitoringBoolState, MachineStatusMonitoringUpDownState, MachineDataType, MachineStatusControlMeterState } from '../../../pages/ConstructionMachineMaster/MachineStatus/_types';\r\nimport { MachineStatusMonitoringRequest, MachineMaintenanceSettingRequest, MachineMaintenanceSettingRestHistoryRequest } from './types';\r\nimport { GetMachineStatusMonitoringInput, MachineStatusMonitoringItem as DtoItem, MachineDataType as DtoMachineDataType, AddOrUpdateClientRequestInput, GetClientRequestInput, RequestType, ResetRequestItem, ResetSubRequestType, MachineStatus as DtoMachineStatus, GetResetHistroyInput, ResetHistoryItem, KeyValueItemOfDateTimeAndString } from '../../swagger-clients';\r\nimport { MachineMaintenanceSettingItem, EditItem, MachineMaintenanceSettingInputItem, MachineMaintenanceSettingResetHistoryListItem, MachineMaintenanceSettingResetHistoryItem } from '../../../pages/ConstructionMachineMaster/StatusEdit/_types';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `施工機ステータス` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MachineStatusMonitoringUtility {\r\n\r\n //#region フィールド\r\n\r\n /** 自動制御接続状態OFF時の文字列を表します。 */\r\n static readonly NotAvailable = \"---\";\r\n /** 昇降状態停止時の文字列を表します。 */\r\n static readonly Stop = \"停止\";\r\n /** 昇降状態上昇時の文字列を表します。 */\r\n static readonly Up = \"上昇\";\r\n /** 昇降状態下降時の文字列を表します。 */\r\n static readonly Down = \"下降\";\r\n /** ステータスがON時の文字列を表します。 */\r\n static readonly On = \"ON\";\r\n /** ステータスOFF時の文字列を表します。 */\r\n static readonly Off = \"OFF\";\r\n /** 更新時間の空文字列を表します。 */\r\n static readonly lastUpdatedAtNull = \"----/--/--\";\r\n\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toItem(items?: DtoItem[]): MachineStatusMonitoringItem | undefined {\r\n if (items == null) {\r\n return void 0;\r\n }\r\n const result: MachineStatusMonitoringItem = {\r\n augerTotalTime1: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AugerTotalTime1).value ?? \"\",\r\n augerTotalTime2: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AugerTotalTime2).value ?? \"\",\r\n batteryVoltage: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.BatteryVoltage).value ?? \"\",\r\n bodyAngleX: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.BodyAngleX).value ?? \"\",\r\n bodyAngleY: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.BodyAngleY).value ?? \"\",\r\n craneTotalDistance: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.CraneTotalDistance).value ?? \"\",\r\n current1: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.Current1).value ?? \"\",\r\n current2: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.Current2).value ?? \"\",\r\n currentDepth: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.CurrentDepth).value ?? \"\",\r\n currentSpeed: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.CurrentSpeed).value ?? \"\",\r\n engineRotateSpeed: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EngineRotateSpeed).value ?? \"\",\r\n engineTotalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EngineTotalTime).value ?? \"\",\r\n flowRate1: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FlowRate1).value ?? \"\",\r\n flowRate2: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FlowRate2).value ?? \"\",\r\n frontLeftJackPressure: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FrontLeftJackPressure).value ?? \"\",\r\n frontRightJackPressure: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FrontRightJackPressure).value ?? \"\",\r\n leaderAngleX: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.LeaderAngleX).value ?? \"\",\r\n leaderAngleY: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.LeaderAngleY).value ?? \"\",\r\n leftStayStrokeLength: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.LeftStayStrokeLength).value ?? \"\",\r\n loadCell: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.LoadCell).value ?? \"\",\r\n mainPumpTotalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.MainPumpTotalTime).value ?? \"\",\r\n gearPumpTotalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.GearPumpTotalTime).value ?? \"\",\r\n rearLeftJackPressure: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.RearLeftJackPressure).value ?? \"\",\r\n rearRightJackPressure: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.RearRightJackPressure).value ?? \"\",\r\n rightStayStrokeLength: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.RightStayStrokeLength).value ?? \"\",\r\n rotate1: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.Rotate1).value ?? \"\",\r\n rotate2: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.Rotate2).value ?? \"\",\r\n totalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.TotalTime).value ?? \"\",\r\n upDownPressure: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.UpDownPressure).value ?? \"\",\r\n upDownSpeedVolume: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.UpDownSpeedVolume).value ?? \"\",\r\n version: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.Version).value ?? \"\",\r\n workingOilTemp: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.WorkingOilTemp).value ?? \"\",\r\n batteryVoltageAvg: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.BatteryVoltageAvg).value ?? \"\",\r\n engineRotationTimeAvg: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EngineRotationTimeAvg).value ?? \"\",\r\n liftingPressureMax: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.LiftingPressureMax).value ?? \"\",\r\n oilTemperatureAvg: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.OilTemperatureAvg).value ?? \"\",\r\n autoControlConnection: MachineStatusMonitoringUtility.toBoolean(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AutoControlConnection)),\r\n ecuError: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EcuError)),\r\n emergencyStopState: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EmergencyStopState)),\r\n engineCoolingWaterOverHeat: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EngineCoolingWaterOverHeat)),\r\n faultLamp: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FaultLamp)),\r\n hookOverHoisting: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.HookOverHoisting)),\r\n pilotPressureWarning: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.PilotPressureWarning)),\r\n workingOilTempWarning: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.WorkingOilTempWarning)),\r\n alarmBatteryVoltage: MachineStatusMonitoringUtility.toBoolState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AlarmBatteryVoltage)),\r\n upDownState: MachineStatusMonitoringUtility.toUpDownState(MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.UpDownState)),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 編集項目を変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMaintenanceSettingItemFromStatusItem(items?: DtoItem[]): MachineMaintenanceSettingItem | undefined {\r\n if (items == null) {\r\n return void 0;\r\n }\r\n const result: MachineMaintenanceSettingItem = {\r\n /** 本体稼働時間[Hr] を表します。*/\r\n totalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.TotalTime).value ?? \"\",\r\n /** エンジン稼働時間[Hr] を表します。*/\r\n engineTotalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EngineTotalTime).value ?? \"\",\r\n /** クレーン昇降距離[m] を表します。*/\r\n craneTotalDistance: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.CraneTotalDistance).value ?? \"\",\r\n /** メインポンプ稼働時間1[Hr] を表します。*/\r\n mainPumpTotalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.MainPumpTotalTime).value ?? \"\",\r\n /** ギアポンプ稼働時間2[Hr] を表します。*/\r\n gearPumpTotalTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.GearPumpTotalTime).value ?? \"\",\r\n /** オーガー1稼働時間[Hr] を表します。*/\r\n augerTotalTime1: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AugerTotalTime1).value ?? \"\",\r\n /** オーガー2稼働時間[Hr] を表します。*/\r\n augerTotalTime2: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AugerTotalTime2).value ?? \"\",\r\n /** 作動油交換後時間[Hr] を表します。*/\r\n workingOilTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.WorkingOilTime).value ?? \"\",\r\n /** エンジンオイル交換後時間[Hr] を表します。*/\r\n engineOilTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.EngineOilTime).value ?? \"\",\r\n /** オイルエレメント交換後時間[Hr] を表します。*/\r\n oilElementTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.OilElementTime).value ?? \"\",\r\n /** エアーエレメント交換後時間[Hr] を表します。*/\r\n airElementTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AirElementTime).value ?? \"\",\r\n /** 燃料エレメント交換後時間[Hr] を表します。*/\r\n fuelElementTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FuelElementTime).value ?? \"\",\r\n /** 作動油エレメント交換後時間[Hr] を表します。*/\r\n workingOilElementTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.WorkingOilElementTime).value ?? \"\",\r\n /** バッテリー交換後日数[日] を表します。*/\r\n batteryTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.BatteryTime).value ?? \"\",\r\n /** クーラント交換後日数[日] を表します。*/\r\n coolantTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.CoolantTime).value ?? \"\",\r\n /** ファンベルト交換後時間[Hr] を表します。*/\r\n fanBeltTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.FanBeltTime).value ?? \"\",\r\n /** オルタネーター交換後時間[Hr] を表します。*/\r\n alternatorTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.AlternatorTime).value ?? \"\",\r\n /** セルモーター交換後時間[Hr] を表します。*/\r\n starterMotorTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.StarterMotorTime).value ?? \"\",\r\n /** 油圧ポンプカップリング交換後時間[Hr] を表します。*/\r\n oilPressurePumpCouplingTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.OilPressurePumpCouplingTime).value ?? \"\",\r\n /** 油圧ポンプ減速機オイル交換後時間[Hr] を表します。*/\r\n oilPressurePumpDeceleratorOilTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.OilPressurePumpDeceleratorOilTime).value ?? \"\",\r\n /** ウインチ減速機オイル交換後時間[Hr] を表します。*/\r\n winchDeceleratorOilTime: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.WinchDeceleratorOilTime).value ?? \"\",\r\n /** 主巻ワイヤ交換後時間[日] を表します。*/\r\n primaryHoistingWire: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.PrimaryHoistingWire).value ?? \"\",\r\n /** 補巻ワイヤ交換後時間[Hr] を表します。*/\r\n subHoistingWire: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.SubHoistingWire).value ?? \"\",\r\n /** 起伏ワイヤ交換後時間[Hr] を表します。*/\r\n upsAndDownsWire: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.UpsAndDownsWire).value ?? \"\",\r\n /** ペンダントロープ交換後時間[日] を表します。*/\r\n pendantRope: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.PendantRope).value ?? \"\",\r\n /** 特定自主検査後日数[日] を表します。*/\r\n selfInspection: MachineStatusMonitoringUtility.toFindItem(items, DtoMachineDataType.SelfInspection).value ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 制御要求リセット項目を変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMaintenanceSettingItemFromResetRequestItem(items?: ResetRequestItem[]): MachineMaintenanceSettingItem | undefined {\r\n if (items == null) {\r\n return void 0;\r\n }\r\n const result: MachineMaintenanceSettingItem = {\r\n /** 本体稼働時間[Hr] を表します。*/\r\n totalTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.TotalTime)?.parameter ?? \"\",\r\n /** エンジン稼働時間[Hr] を表します。*/\r\n engineTotalTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.EngineTotalTime)?.parameter ?? \"\",\r\n /** クレーン昇降距離[m] を表します。*/\r\n craneTotalDistance: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.CraneTotalDistance)?.parameter ?? \"\",\r\n /** メインポンプ稼働時間1[Hr] を表します。*/\r\n mainPumpTotalTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.MainPumpTotalTime)?.parameter ?? \"\",\r\n /** ギアポンプ稼働時間2[Hr] を表します。*/\r\n gearPumpTotalTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.GearPumpTotalTime)?.parameter ?? \"\",\r\n /** オーガー1稼働時間[Hr] を表します。*/\r\n augerTotalTime1: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.AugerTotalTime1)?.parameter ?? \"\",\r\n /** オーガー2稼働時間[Hr] を表します。*/\r\n augerTotalTime2: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.AugerTotalTime2)?.parameter ?? \"\",\r\n /** 作動油交換後時間[Hr] を表します。*/\r\n workingOilTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.WorkingOilTime)?.parameter ?? \"\",\r\n /** エンジンオイル交換後時間[Hr] を表します。*/\r\n engineOilTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.EngineOilTime)?.parameter ?? \"\",\r\n /** オイルエレメント交換後時間[Hr] を表します。*/\r\n oilElementTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.OilElementTime)?.parameter ?? \"\",\r\n /** エアーエレメント交換後時間[Hr] を表します。*/\r\n airElementTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.AirElementTime)?.parameter ?? \"\",\r\n /** 燃料エレメント交換後時間[Hr] を表します。*/\r\n fuelElementTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.FuelElementTime)?.parameter ?? \"\",\r\n /** 作動油エレメント交換後時間[Hr] を表します。*/\r\n workingOilElementTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.WorkingOilElementTime)?.parameter ?? \"\",\r\n /** バッテリー交換後日数[日] を表します。*/\r\n batteryTime: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.BatteryTime)?.parameter ?? \"\"),\r\n /** クーラント交換後日数[日] を表します。*/\r\n coolantTime: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.CoolantTime)?.parameter ?? \"\"),\r\n /** ファンベルト交換後時間[Hr] を表します。*/\r\n fanBeltTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.FanBeltTime)?.parameter ?? \"\",\r\n /** オルタネーター交換後時間[Hr] を表します。*/\r\n alternatorTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.AlternatorTime)?.parameter ?? \"\",\r\n /** セルモーター交換後時間[Hr] を表します。*/\r\n starterMotorTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.StarterMotorTime)?.parameter ?? \"\",\r\n /** 油圧ポンプカップリング交換後時間[Hr] を表します。*/\r\n oilPressurePumpCouplingTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.OilPressurePumpCouplingTime)?.parameter ?? \"\",\r\n /** 油圧ポンプ減速機オイル交換後時間[Hr] を表します。*/\r\n oilPressurePumpDeceleratorOilTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.OilPressurePumpDeceleratorOilTime)?.parameter ?? \"\",\r\n /** ウインチ減速機オイル交換後時間[Hr] を表します。*/\r\n winchDeceleratorOilTime: MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.WinchDeceleratorOilTime)?.parameter ?? \"\",\r\n /** 主巻ワイヤ交換後日数[日] を表します。*/\r\n primaryHoistingWire: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.PrimaryHoistingWire)?.parameter ?? \"\"),\r\n /** 補巻ワイヤ交換後日数[日] を表します。*/\r\n subHoistingWire: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.SubHoistingWire)?.parameter ?? \"\"),\r\n /** 起伏ワイヤ交換後日数[日] を表します。*/\r\n upsAndDownsWire: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.UpsAndDownsWire)?.parameter ?? \"\"),\r\n /** ペンダントロープ交換後日数[日] を表します。*/\r\n pendantRope: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.PendantRope)?.parameter ?? \"\"),\r\n /** 特定自主検査後日数[日] を表します。*/\r\n selfInspection: MachineStatusMonitoringUtility.toResetRequestDateParameter(MachineStatusMonitoringUtility.toFindResetRequestItem(items, ResetSubRequestType.SelfInspection)?.parameter ?? \"\"),\r\n };\r\n return result;\r\n\r\n }\r\n\r\n\r\n /**\r\n * リセット履歴項目を変換します。\r\n * @param items\r\n */\r\n public static toMachineMaintenanceSettingResetHistoryItem(items?: ResetHistoryItem[]): MachineMaintenanceSettingResetHistoryItem[] {\r\n const result: MachineMaintenanceSettingResetHistoryItem[] = [];\r\n if (items == null) return result;\r\n\r\n items.forEach(items => {\r\n result.push({\r\n machineDataType: MachineStatusMonitoringUtility.toMachineDataType(items.type),\r\n resetHistories: MachineStatusMonitoringUtility.toMachineMaintenanceSettingResetHistoryListItem(items.resetHistories),\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 施工機モニタ―情報一覧から指定種別の情報を取得します。\r\n * @param source 施工機モニタ―情報一覧を指定します。\r\n * @param type 種別を指定します。\r\n * @returns 見つかった情報を返します。\r\n */\r\n private static toFindItem(source: DtoItem[], type: DtoMachineDataType): DtoItem {\r\n const result = source.find(item => item.type === type);\r\n if (result == null) {\r\n throw new Error(\"toFindItem\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 制御要求情報一覧から指定種別の情報を取得します。\r\n * @param source 制御要求情報一覧を指定します。\r\n * @param type 種別を指定します。\r\n * @returns 見つかった情報を返します。\r\n */\r\n private static toFindResetRequestItem(source: ResetRequestItem[], type: ResetSubRequestType): ResetRequestItem | undefined {\r\n const result = source.find(item => item.type === type);\r\n return result;\r\n }\r\n\r\n /**\r\n * 施工機ステータスの昇降状態を変換します。\r\n * @param source 施工機モニタ―情報を指定します。\r\n */\r\n private static toUpDownState(item: DtoItem): MachineStatusMonitoringUpDownState | undefined {\r\n const result: MachineStatusMonitoringUpDownState | undefined =\r\n item.value === MachineStatusMonitoringUtility.NotAvailable ? MachineStatusMonitoringUpDownState.NotAvailable :\r\n item.value === MachineStatusMonitoringUtility.Stop ? MachineStatusMonitoringUpDownState.Stop :\r\n item.value === MachineStatusMonitoringUtility.Up ? MachineStatusMonitoringUpDownState.Up :\r\n item.value === MachineStatusMonitoringUtility.Down ? MachineStatusMonitoringUpDownState.Down :\r\n void 0;\r\n return result;\r\n }\r\n\r\n /**\r\n * 施工機ステータスの Bool 値を変換します。\r\n * @param source 施工機モニタ―情報を指定します。\r\n */\r\n private static toBoolState(item: DtoItem): MachineStatusMonitoringBoolState | undefined {\r\n const result: MachineStatusMonitoringBoolState | undefined =\r\n item.value === MachineStatusMonitoringUtility.NotAvailable ? MachineStatusMonitoringBoolState.NotAvailable :\r\n item.value === MachineStatusMonitoringUtility.On ? MachineStatusMonitoringBoolState.On :\r\n item.value === MachineStatusMonitoringUtility.Off ? MachineStatusMonitoringBoolState.Off :\r\n void 0;\r\n return result;\r\n }\r\n\r\n /**\r\n * 施工機ステータスの Bool 値を変換します。\r\n * @param source 施工機モニタ―情報を指定します\r\n */\r\n private static toBoolean(item: DtoItem): boolean | undefined {\r\n const result: boolean | undefined =\r\n item.value === MachineStatusMonitoringUtility.On ? true :\r\n item.value === MachineStatusMonitoringUtility.Off ? false :\r\n void 0;\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 管理計器ステータスを変換します。\r\n * @param item\r\n */\r\n public static toMachineStatus(item?: DtoMachineStatus): MachineStatusControlMeterState | undefined {\r\n const result: MachineStatusControlMeterState | undefined =\r\n item === DtoMachineStatus.Penetration ? MachineStatusControlMeterState.Penetration :\r\n item === DtoMachineStatus.Depth ? MachineStatusControlMeterState.Depth :\r\n item === DtoMachineStatus.TipPullOut ? MachineStatusControlMeterState.TipPullOut :\r\n item === DtoMachineStatus.TipHitBack ? MachineStatusControlMeterState.TipHitBack :\r\n item === DtoMachineStatus.TipStir ? MachineStatusControlMeterState.TipStir :\r\n item === DtoMachineStatus.PullOut ? MachineStatusControlMeterState.PullOut :\r\n item === DtoMachineStatus.RePenePullOut ? MachineStatusControlMeterState.RePenePullOut :\r\n item === DtoMachineStatus.RePeneHitBack ? MachineStatusControlMeterState.RePeneHitBack :\r\n item === DtoMachineStatus.Stop ? MachineStatusControlMeterState.Stop :\r\n item === DtoMachineStatus.Other ? MachineStatusControlMeterState.Other :\r\n void 0;\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: MachineStatusMonitoringRequest): GetMachineStatusMonitoringInput {\r\n const result = new GetMachineStatusMonitoringInput();\r\n result.init({\r\n machineId: source.id,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toClientRequestInput(source: MachineMaintenanceSettingRequest): AddOrUpdateClientRequestInput {\r\n if (source.reset == null) {\r\n throw new Error(\"toClientRequestInput\");\r\n }\r\n const result = new AddOrUpdateClientRequestInput();\r\n result.init({\r\n machineId: source.id,\r\n type: RequestType.Reset,\r\n reset: MachineStatusMonitoringUtility.toResetRequestItem(source.reset),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetClientRequestInput(source: MachineMaintenanceSettingRequest): GetClientRequestInput {\r\n const result = new GetClientRequestInput();\r\n result.init({\r\n machineId: source.id,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGetResetHistroyInput(source: MachineMaintenanceSettingRestHistoryRequest): GetResetHistroyInput {\r\n const result = new GetResetHistroyInput();\r\n result.init({\r\n machineId: source.id,\r\n subRequestId: source.machineDataType ? MachineStatusMonitoringUtility.toResetSubRequestType(source.machineDataType) : void 0,\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toResetRequestItem(source: MachineMaintenanceSettingInputItem): ResetRequestItem {\r\n const result = new ResetRequestItem();\r\n result.init({\r\n type: MachineStatusMonitoringUtility.toResetSubRequestType(source.machineDataType),\r\n parameter: source.value,\r\n hrMeter: source.hrMeter?.toString(),\r\n });\r\n return result;\r\n\r\n }\r\n\r\n /**\r\n * ステータス項目種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toResetSubRequestType(source: MachineDataType): ResetSubRequestType {\r\n const result: ResetSubRequestType | undefined =\r\n source === MachineDataType.EngineTotalTime ? ResetSubRequestType.EngineTotalTime :\r\n source === MachineDataType.CraneTotalDistance ? ResetSubRequestType.CraneTotalDistance :\r\n source === MachineDataType.MainPumpTotalTime ? ResetSubRequestType.MainPumpTotalTime :\r\n source === MachineDataType.GearPumpTotalTime ? ResetSubRequestType.GearPumpTotalTime :\r\n source === MachineDataType.AugerTotalTime1 ? ResetSubRequestType.AugerTotalTime1 :\r\n source === MachineDataType.AugerTotalTime2 ? ResetSubRequestType.AugerTotalTime2 :\r\n source === MachineDataType.WorkingOilTime ? ResetSubRequestType.WorkingOilTime :\r\n source === MachineDataType.EngineOilTime ? ResetSubRequestType.EngineOilTime :\r\n source === MachineDataType.OilElementTime ? ResetSubRequestType.OilElementTime :\r\n source === MachineDataType.AirElementTime ? ResetSubRequestType.AirElementTime :\r\n source === MachineDataType.FuelElementTime ? ResetSubRequestType.FuelElementTime :\r\n source === MachineDataType.WorkingOilElementTime ? ResetSubRequestType.WorkingOilElementTime :\r\n source === MachineDataType.BatteryTime ? ResetSubRequestType.BatteryTime :\r\n source === MachineDataType.CoolantTime ? ResetSubRequestType.CoolantTime :\r\n source === MachineDataType.FanBeltTime ? ResetSubRequestType.FanBeltTime :\r\n source === MachineDataType.AlternatorTime ? ResetSubRequestType.AlternatorTime :\r\n source === MachineDataType.StarterMotorTime ? ResetSubRequestType.StarterMotorTime :\r\n source === MachineDataType.OilPressurePumpCouplingTime ? ResetSubRequestType.OilPressurePumpCouplingTime :\r\n source === MachineDataType.OilPressurePumpDeceleratorOilTime ? ResetSubRequestType.OilPressurePumpDeceleratorOilTime :\r\n source === MachineDataType.WinchDeceleratorOilTime ? ResetSubRequestType.WinchDeceleratorOilTime :\r\n source === MachineDataType.PrimaryHoistingWire ? ResetSubRequestType.PrimaryHoistingWire :\r\n source === MachineDataType.SubHoistingWire ? ResetSubRequestType.SubHoistingWire :\r\n source === MachineDataType.UpsAndDownsWire ? ResetSubRequestType.UpsAndDownsWire :\r\n source === MachineDataType.PendantRope ? ResetSubRequestType.PendantRope :\r\n source === MachineDataType.SelfInspection ? ResetSubRequestType.SelfInspection :\r\n source === MachineDataType.TotalTime ? ResetSubRequestType.TotalTime :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toResetSubRequestType\");\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * ステータス項目種別に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMachineDataType(source: ResetSubRequestType): MachineDataType {\r\n const result: MachineDataType | undefined =\r\n source === ResetSubRequestType.EngineTotalTime ? MachineDataType.EngineTotalTime :\r\n source === ResetSubRequestType.CraneTotalDistance ? MachineDataType.CraneTotalDistance :\r\n source === ResetSubRequestType.MainPumpTotalTime ? MachineDataType.MainPumpTotalTime :\r\n source === ResetSubRequestType.GearPumpTotalTime ? MachineDataType.GearPumpTotalTime :\r\n source === ResetSubRequestType.AugerTotalTime1 ? MachineDataType.AugerTotalTime1 :\r\n source === ResetSubRequestType.AugerTotalTime2 ? MachineDataType.AugerTotalTime2 :\r\n source === ResetSubRequestType.WorkingOilTime ? MachineDataType.WorkingOilTime :\r\n source === ResetSubRequestType.EngineOilTime ? MachineDataType.EngineOilTime :\r\n source === ResetSubRequestType.OilElementTime ? MachineDataType.OilElementTime :\r\n source === ResetSubRequestType.AirElementTime ? MachineDataType.AirElementTime :\r\n source === ResetSubRequestType.FuelElementTime ? MachineDataType.FuelElementTime :\r\n source === ResetSubRequestType.WorkingOilElementTime ? MachineDataType.WorkingOilElementTime :\r\n source === ResetSubRequestType.BatteryTime ? MachineDataType.BatteryTime :\r\n source === ResetSubRequestType.CoolantTime ? MachineDataType.CoolantTime :\r\n source === ResetSubRequestType.FanBeltTime ? MachineDataType.FanBeltTime :\r\n source === ResetSubRequestType.AlternatorTime ? MachineDataType.AlternatorTime :\r\n source === ResetSubRequestType.StarterMotorTime ? MachineDataType.StarterMotorTime :\r\n source === ResetSubRequestType.OilPressurePumpCouplingTime ? MachineDataType.OilPressurePumpCouplingTime :\r\n source === ResetSubRequestType.OilPressurePumpDeceleratorOilTime ? MachineDataType.OilPressurePumpDeceleratorOilTime :\r\n source === ResetSubRequestType.WinchDeceleratorOilTime ? MachineDataType.WinchDeceleratorOilTime :\r\n source === ResetSubRequestType.PrimaryHoistingWire ? MachineDataType.PrimaryHoistingWire :\r\n source === ResetSubRequestType.SubHoistingWire ? MachineDataType.SubHoistingWire :\r\n source === ResetSubRequestType.UpsAndDownsWire ? MachineDataType.UpsAndDownsWire :\r\n source === ResetSubRequestType.PendantRope ? MachineDataType.PendantRope :\r\n source === ResetSubRequestType.SelfInspection ? MachineDataType.SelfInspection :\r\n source === ResetSubRequestType.TotalTime ? MachineDataType.TotalTime :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toMachineDataType\");\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * リセット履歴テーブル項目に変換します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toMachineMaintenanceSettingResetHistoryListItem(items?: KeyValueItemOfDateTimeAndString[]): MachineMaintenanceSettingResetHistoryListItem[] {\r\n const result: MachineMaintenanceSettingResetHistoryListItem[] = []\r\n if (items == null) return result;\r\n\r\n items.forEach(source => {\r\n if (!source.key || !source.value) return;\r\n\r\n result.push({\r\n resetAt: SharedUtility.toDateTimeString(new Date(source.key)),\r\n resetValue: source.value,\r\n });\r\n })\r\n\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * カレンダー形式項目のリセット日付に変換します。\r\n * @param parameter 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toResetRequestDateParameter(parameter: string): string {\r\n return !parameter ? \"\" : SharedUtility.toDateString(new Date(parameter));\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MachineStatusMonitoringClient, GetMachineStatusMonitoringInput, GetMachineStatusMonitoringOutput, AddOrUpdateClientRequestInput, GetClientRequestInput, GetResetHistroyInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MachineStatusMonitoringRequest, MachineStatusMonitoringResult, MachineMaintenanceSettingResult, MachineMaintenanceSettingRequest, MachineMaintenanceSettingResetHistoryResult, MachineMaintenanceSettingRestHistoryRequest } from './types';\r\nimport { MachineStatusMonitoringUtility } from './machine-status-monitoring-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `施工機ステータス` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MachineStatusMonitoringAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MachineStatusMonitoringAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): MachineStatusMonitoringResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createEditItemErrorResult(message?: string): MachineMaintenanceSettingResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createMachineMaintenanceSettingErrorResult(message?: string): MachineMaintenanceSettingResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createMachineMaintenanceSettingResetHistoryErrorResult(message?: string): MachineMaintenanceSettingResetHistoryResult {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: MachineStatusMonitoringRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetMachineStatusMonitoringInput();\r\n input.init(MachineStatusMonitoringUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineStatusMonitoringResult = {\r\n isError: false,\r\n item: MachineStatusMonitoringUtility.toItem(output.items),\r\n machineStatus: MachineStatusMonitoringUtility.toMachineStatus(output.status),\r\n ipAddress: output.ipAddress ?? \"\",\r\n lastUpdatedAt: output.lastUpdatedAt == null ? MachineStatusMonitoringUtility.lastUpdatedAtNull : SharedUtility.toDateTimeString(new Date(output.lastUpdatedAt)),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getMachineMaintenanceSettingItemAsync(parameter: MachineStatusMonitoringRequest): Promise {\r\n\r\n // 実行\r\n const input = new GetMachineStatusMonitoringInput();\r\n input.init(MachineStatusMonitoringUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createEditItemErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createEditItemErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineMaintenanceSettingResult = {\r\n isError: false,\r\n item: MachineStatusMonitoringUtility.toMaintenanceSettingItemFromStatusItem(output.items),\r\n lastUpdatedAt: output.lastUpdatedAt == null ? MachineStatusMonitoringUtility.lastUpdatedAtNull : SharedUtility.toDateTimeString(new Date(output.lastUpdatedAt)),\r\n };\r\n return result;\r\n }\r\n\r\n\r\n\r\n /**\r\n * 要求情報の追加または更新を行います。\r\n * @param parameter\r\n */\r\n public async addOrUpdateClientRequestAsync(parameter: MachineMaintenanceSettingRequest): Promise {\r\n\r\n // 実行\r\n const input = new AddOrUpdateClientRequestInput();\r\n input.init(MachineStatusMonitoringUtility.toClientRequestInput(parameter));\r\n const output = await this.client.addOrUpdateClientRequest(input);\r\n if (output == null) {\r\n return this.createMachineMaintenanceSettingErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createMachineMaintenanceSettingErrorResult(output.errorMessage);\r\n }\r\n // 正常\r\n const result: MachineMaintenanceSettingResult = {\r\n isError: false,\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 要求情報の取得を行います。\r\n * @param parameter\r\n */\r\n public async getClientRequestAsync(parameter: MachineMaintenanceSettingRequest): Promise {\r\n\r\n const input = new GetClientRequestInput();\r\n input.init(MachineStatusMonitoringUtility.toGetClientRequestInput(parameter))\r\n const output = await this.client.getClientRequest(input);\r\n if (output == null) {\r\n return this.createMachineMaintenanceSettingErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createMachineMaintenanceSettingErrorResult(output.errorMessage);\r\n }\r\n // 正常\r\n const result: MachineMaintenanceSettingResult = {\r\n isError: false,\r\n item: MachineStatusMonitoringUtility.toMaintenanceSettingItemFromResetRequestItem(output.resetItems),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * リセット履歴情報の取得を行います。\r\n * @param parameter\r\n */\r\n public async getResetHistoryAsync(parameter: MachineMaintenanceSettingRestHistoryRequest): Promise {\r\n\r\n const input = new GetResetHistroyInput();\r\n input.init(MachineStatusMonitoringUtility.toGetResetHistroyInput(parameter))\r\n const output = await this.client.getClientResetHistory(input);\r\n if (output == null) {\r\n return this.createMachineMaintenanceSettingErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createMachineMaintenanceSettingResetHistoryErrorResult(output.errorMessage);\r\n }\r\n // 正常\r\n const result: MachineMaintenanceSettingResetHistoryResult = {\r\n isError: false,\r\n items: MachineStatusMonitoringUtility.toMachineMaintenanceSettingResetHistoryItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MachineStatusMonitoringClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { Dispatch } from 'redux';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\nimport { ExtendGenericState, createExtendGenericSlice } from '../shared/create-extend-generic-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\nimport { MachineStatusMonitoringAdapter } from '../../adapter/machine-status-monitoring/machine-status-monitoring-adapter';\r\nimport { MachineStatusMonitoringRequest, MachineStatusMonitoringResult } from '../../adapter/machine-status-monitoring/types';\r\n\r\n/**施工機ステータス アイテム情報の State を表します。 */\r\ninterface MachineStatusMonitoringItemState {\r\n /** タイマーIDを表します。 */\r\n timerId: number;\r\n}\r\n\r\n/** リロードのインターバル時間[ms]を表します。 */\r\nconst ReloadTimerInterval = 60000;\r\n\r\n\r\n// State の初期値を設定します。\r\nconst initialState: ExtendGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n isError: false,\r\n },\r\n item: {\r\n timerId: 0,\r\n }\r\n}\r\n\r\n\r\n/** 施工機ステータス Slice を 提供します。*/\r\nexport const MachineStatusMonitoringSlice = createExtendGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'MachineMonitoringStatus',\r\n initialState: initialState,\r\n reducers: {\r\n\r\n /**\r\n * 更新タイマーを停止します。\r\n * @param state\r\n */\r\n stopReloadTimer(state: ExtendGenericState) {\r\n clearTimeout(state.item.timerId);\r\n state.item.timerId = 0;\r\n },\r\n /**\r\n * 更新タイマーを開始します。\r\n * @param state\r\n */\r\n startReloadTimer(state: ExtendGenericState, action: PayloadAction) {\r\n clearTimeout(state.item.timerId);\r\n state.item.timerId = action.payload;\r\n }\r\n\r\n },\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: MachineStatusMonitoringRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineStatusMonitoringSlice.actions.fetchStart());\r\n\r\n\r\n // 通信処理\r\n const getResultWaiter = await MachineStatusMonitoringAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.id });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n dispatch(MachineStatusMonitoringSlice.actions.fetchSuccess(getResult));\r\n\r\n if (getResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineStatusMonitoringSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineStatusMonitoringSlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n // メッセージ\r\n dispatch(MachineStatusMonitoringSlice.actions.showSuccessMessage());\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MachineStatusMonitoringSlice.actions.fetchFailure({\r\n item: void 0,\r\n isError: true,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MachineStatusMonitoringSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineStatusMonitoringSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetReloadAsync = (parameter: MachineStatusMonitoringRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n\r\n // 実行\r\n await dispatch(onGetAsync(parameter));\r\n\r\n } catch (e) {\r\n //何もしない\r\n\r\n } finally {\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n }\r\n\r\n}\r\n\r\n/** リロードタイマーを停止します。 */\r\nconst stopReloadTimer = () => (dispatch: Dispatch) => {\r\n\r\n // タイマー停止\r\n dispatch(MachineStatusMonitoringSlice.actions.stopReloadTimer());\r\n}\r\n\r\n\r\n/** リロードタイマーを開始します。 */\r\nconst startReloadTimer = (parameter: MachineStatusMonitoringRequest) => (dispatch: Dispatch) => {\r\n\r\n // タイマー開始\r\n const timer = window.setTimeout(() => dispatch(onGetReloadAsync(parameter)), ReloadTimerInterval)\r\n dispatch(MachineStatusMonitoringSlice.actions.startReloadTimer(timer));\r\n}\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { MachineStatusControlMeterState } from '../_types';\r\n\r\n\r\n/** 貫入の文字列を表します。 */\r\nconst Penetration = \"貫入\";\r\n/** 打深の文字列を表します。 */\r\nconst Depth = \"打深\";\r\n/** 先端処理引抜の文字列を表します。 */\r\nconst TipPullOut = \"先端処理引抜\";\r\n/** 先端処理打戻の文字列を表します。 */\r\nconst TipHitBack = \"先端処理打戻\";\r\n/** 先端処理定置撹拌の文字列を表します。 */\r\nconst TipStir = \"先端処理定置撹拌\";\r\n/** 引抜の文字列を表します。 */\r\nconst PullOut = \"引抜\";\r\n/** 再貫引抜の文字列を表します。 */\r\nconst RePenePullOut = \"再貫引抜\";\r\n/** 再貫打戻の文字列を表します。 */\r\nconst RePeneHitBack = \"再貫打戻\";\r\n/** 一時停止の文字列を表します。 */\r\nconst Stop = \"一時停止\";\r\n/** 施工外の文字列を表します。 */\r\nconst Other = \"施工外\";\r\n/** CTU未接続時の文字列を表します。 */\r\nconst NotAvailable = \"---\";\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"block\",\r\n minHeight: \"136px\",\r\n },\r\n // タイトル\r\n title: {\r\n fontSize: \"1.25rem\",\r\n\r\n },\r\n // 値\r\n value: {\r\n fontSize: \"2.5rem\",\r\n textAlign: \"center\",\r\n marginTop: theme.spacing(1.5),\r\n },\r\n }),\r\n);\r\n\r\n/** 管理計器ステータスカードの Props を提供します。 */\r\ninterface Props {\r\n /** 取得値を表します。*/\r\n status?: MachineStatusControlMeterState,\r\n};\r\n\r\n/**\r\n * 管理計器ステータスカードを提供します。\r\n * @param props\r\n */\r\nconst ControlMeterStatusCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n\r\n /** 昇降状態を表示します。 */\r\n function renderStatusIcon(status: MachineStatusControlMeterState | undefined): string {\r\n\r\n const result: string =\r\n status === MachineStatusControlMeterState.Penetration ? Penetration :\r\n status === MachineStatusControlMeterState.Depth ? Depth :\r\n status === MachineStatusControlMeterState.TipPullOut ? TipPullOut :\r\n status === MachineStatusControlMeterState.TipHitBack ? TipHitBack :\r\n status === MachineStatusControlMeterState.TipStir ? TipStir :\r\n status === MachineStatusControlMeterState.PullOut ? PullOut :\r\n status === MachineStatusControlMeterState.RePenePullOut ? RePenePullOut :\r\n status === MachineStatusControlMeterState.RePeneHitBack ? RePeneHitBack :\r\n status === MachineStatusControlMeterState.Stop ? Stop :\r\n status === MachineStatusControlMeterState.Other ? Other :\r\n NotAvailable;\r\n return result;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n 管理計器ステータス\r\n \r\n\r\n {/* ステータス */}\r\n \r\n {renderStatusIcon(props.status)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ControlMeterStatusCard;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { FaRegArrowAltCircleDown, FaRegArrowAltCircleUp, FaRegStopCircle } from 'react-icons/fa';\r\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\r\n// component\r\nimport { MachineStatusMonitoringUpDownState } from '../_types/';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n minWidth: \"300px\",\r\n minHeight: \"136px\",\r\n\r\n },\r\n // ボディ\r\n body: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n\r\n // タイトル\r\n title: {\r\n fontSize: \"1.25rem\",\r\n },\r\n // テキスト\r\n text: {\r\n fontSize: \"1.5rem\",\r\n\r\n },\r\n // アイコン\r\n icon: {\r\n '& svg': {\r\n fontSize: \"4rem\",\r\n marginRight: \"0.5rem\",\r\n },\r\n },\r\n iconGreen: {\r\n color: theme.palette.success.main,\r\n },\r\n iconRed: {\r\n color: theme.palette.error.main,\r\n },\r\n iconBlue: {\r\n color: theme.palette.info.main,\r\n },\r\n iconGray: {\r\n color: theme.palette.text.disabled,\r\n },\r\n }),\r\n);\r\n\r\n/** 昇降状態カードの Props を提供します。 */\r\ninterface Props {\r\n /** 昇降状態を表します。 */\r\n status?: MachineStatusMonitoringUpDownState,\r\n\r\n};\r\n\r\n/** 昇降状態カードを提供します。 */\r\nconst LiftingStatusCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 昇降状態を表示します。 */\r\n function renderStatusIcon(status: MachineStatusMonitoringUpDownState | undefined): JSX.Element {\r\n\r\n\r\n let icon: JSX.Element | null = null;\r\n let text: string = \"\";\r\n\r\n switch (status) {\r\n case MachineStatusMonitoringUpDownState.NotAvailable:\r\n icon = ;\r\n text = \"---\";\r\n break;\r\n case MachineStatusMonitoringUpDownState.Stop:\r\n icon = ;\r\n text = \"停止中\";\r\n break;\r\n case MachineStatusMonitoringUpDownState.Up:\r\n icon = ;\r\n text = \"上昇中\";\r\n break;\r\n case MachineStatusMonitoringUpDownState.Down:\r\n icon = ;\r\n text = \"下降中\";\r\n break;\r\n default:\r\n // エラー\r\n icon = <>;\r\n text = \"\";\r\n break;\r\n };\r\n\r\n\r\n return (\r\n <>\r\n \r\n {icon}\r\n \r\n
\r\n
{text}
\r\n
\r\n \r\n );\r\n\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n 昇降状態\r\n \r\n\r\n
\r\n {/* 状態表示 */}\r\n {\r\n // CTU接続状態を確認\r\n props.status === void 0\r\n ? (\r\n //CTU未接続の場合\r\n <>\r\n \r\n \r\n\r\n \r\n
\r\n
CTU未接続
\r\n
\r\n \r\n )\r\n : (\r\n // CTU接続中の場合\r\n renderStatusIcon(props.status)\r\n )\r\n }\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LiftingStatusCard;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\r\nimport LinkIcon from '@material-ui/icons/Link';\r\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n minWidth: \"300px\",\r\n minHeight: \"136px\",\r\n\r\n },\r\n // ボディ\r\n body: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n\r\n // タイトル\r\n title: {\r\n fontSize: \"1.25rem\",\r\n },\r\n // テキスト\r\n text: {\r\n fontSize: \"1.5rem\",\r\n\r\n },\r\n // アイコン\r\n icon: {\r\n '& svg': {\r\n fontSize: \"4rem\",\r\n marginRight: \"0.5rem\",\r\n },\r\n },\r\n iconGreen: {\r\n color: theme.palette.success.main,\r\n },\r\n iconRed: {\r\n color: theme.palette.error.main,\r\n },\r\n iconGray: {\r\n color: theme.palette.text.disabled,\r\n },\r\n }),\r\n);\r\n\r\n/** 自動制御接続状態カードの Props を提供します。 */\r\ninterface Props {\r\n /** 接続状態を表します。 */\r\n status?: boolean,\r\n};\r\n\r\n/** 自動制御接続状態カードを提供します。 */\r\nconst ConnectionStatusCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 自動制御接続状態を表示します。 */\r\n function renderStatusIcon(status: boolean): JSX.Element {\r\n\r\n let icon: JSX.Element | null = null;\r\n let text: string = \"\";\r\n\r\n if (status) {\r\n icon = ;\r\n text = \"接続中\";\r\n } else {\r\n icon = ;\r\n text = \"切断中\";\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {icon}\r\n \r\n
\r\n
{text}
\r\n
\r\n \r\n );\r\n\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n 自動制御接続\r\n \r\n\r\n
\r\n {/* 状態表示 */}\r\n {\r\n // CTU接続状態を確認\r\n props.status === void 0\r\n ? (\r\n //CTU未接続の場合\r\n <>\r\n \r\n \r\n\r\n \r\n
\r\n
CTU未接続
\r\n
\r\n \r\n )\r\n : (\r\n // CTU接続中の場合\r\n renderStatusIcon(props.status)\r\n )\r\n }\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ConnectionStatusCard;\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n/** 計測結果カードの計測値のインターフェイスを提供します。 */\r\ninterface ValueUnit {\r\n /** 計測値を表します。 */\r\n value: string,\r\n /** 単位を表します。 */\r\n unit?: string,\r\n};\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"block\",\r\n minHeight: \"136px\",\r\n },\r\n // タイトル\r\n title: {\r\n //whiteSpace: \"nowrap\",\r\n //overflow: \"hidden\",\r\n //textOverflow: \"ellipsis\",\r\n fontSize: \"1.25rem\",\r\n\r\n },\r\n // 取得値コンテナ\r\n textContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"flex-end\",\r\n },\r\n // 値\r\n value: {\r\n fontSize: \"3rem\",\r\n fontWeight: \"bold\",\r\n color: theme.palette.success.main,\r\n textAlign: \"end\",\r\n },\r\n // 単位\r\n unit: {\r\n fontSize: \"1.2rem\",\r\n textAlign: \"start\",\r\n marginLeft: \"0.5rem\",\r\n },\r\n }),\r\n);\r\n\r\n/** 計測結果カードの Props を提供します。 */\r\ntype Props = {\r\n /** タイトルを表します。 */\r\n title: string,\r\n /** 取得値を表します。*/\r\n measuredvalue: ValueUnit,\r\n};\r\n\r\n/**\r\n * 計測結果カードを提供します。\r\n * @param props\r\n */\r\nconst MeasuredCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n \r\n \r\n {props.title}\r\n \r\n\r\n \r\n\r\n \r\n {/* 値 */}\r\n \r\n {!props.measuredvalue.value ? '\\u00A0' : props.measuredvalue.value}\r\n \r\n {/* 単位 */}\r\n \r\n {props.measuredvalue.unit}\r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MeasuredCard;\r\n","// react\r\nimport * as React from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport CheckCircleOutlineIcon from '@material-ui/icons/CheckCircleOutline';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\r\n// component\r\nimport { MachineStatusMonitoringBoolState } from '../_types/';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n // アイコン\r\n icon: {\r\n fontSize: \"3rem\",\r\n marginRight: \"0.5rem\",\r\n\r\n },\r\n // アイコン正常状態\r\n iconGreen: {\r\n color: theme.palette.success.main,\r\n },\r\n // アイコンエラー状態\r\n\r\n iconRed: {\r\n color: theme.palette.error.main,\r\n },\r\n // アイコン未接続状態\r\n\r\n iconGray: {\r\n color: theme.palette.text.disabled,\r\n },\r\n // ブリンク\r\n blinkState: {\r\n animation: '$blinkError 1s ease-in-out infinite alternate',\r\n '& p': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n },\r\n '& svg': {\r\n animation: '$blinkIcon 1s ease-in-out infinite alternate',\r\n },\r\n },\r\n\r\n '@keyframes blinkError': {\r\n '0%': {\r\n color: theme.palette.error.contrastText,\r\n backgroundColor: theme.palette.error.main,\r\n },\r\n '100%': {\r\n color: theme.palette.primary,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n },\r\n\r\n '@keyframes blinkIcon': {\r\n '0%': {\r\n color: theme.palette.error.contrastText,\r\n },\r\n '100%': {\r\n color: theme.palette.error.main,\r\n },\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** アラートパラメーターカードの Props を提供します。 */\r\ninterface Props {\r\n /** タイトルを表します。 */\r\n title: string,\r\n /** アラートステータスの状態を表します。*/\r\n status?: MachineStatusMonitoringBoolState,\r\n};\r\n\r\n/** アラートパラメーターカードを提供します。 */\r\nconst AlertParameterCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n\r\n function renderAlertStatus(status: MachineStatusMonitoringBoolState, title: string): JSX.Element {\r\n let result: JSX.Element;\r\n\r\n switch (status) {\r\n case MachineStatusMonitoringBoolState.NotAvailable:\r\n // 未接続\r\n result = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n\r\n \r\n \r\n );\r\n break;\r\n case MachineStatusMonitoringBoolState.On:\r\n // On(Error)状態\r\n result = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n\r\n \r\n \r\n );\r\n break;\r\n case MachineStatusMonitoringBoolState.Off:\r\n // Off(正常)状態\r\n result = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n\r\n );\r\n break;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n // CTU接続状態を確認\r\n props.status == null\r\n ? (\r\n // CTU未接続状態の場合\r\n \r\n \r\n \r\n {/* ステータスアイコン */}\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n )\r\n : (\r\n // CTU接続中の場合\r\n <>\r\n {renderAlertStatus(props.status, props.title)}\r\n \r\n )\r\n }\r\n \r\n );\r\n\r\n};\r\n\r\nexport default AlertParameterCard;\r\n","// react\r\nimport * as React from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\r\nimport IndeterminateCheckBoxIcon from '@material-ui/icons/IndeterminateCheckBox';\r\n// component\r\nimport { MachineStatusMonitoringBoolState } from '../_types/';\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n // タイトル\r\n title: {\r\n alignSelf: \"center\",\r\n },\r\n // ステータス\r\n status: {\r\n fontSize: \"1.5rem\",\r\n },\r\n // コンテナ\r\n container: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n // アイコン\r\n icon: {\r\n fontSize: \"3rem\",\r\n marginRight: \"0.5rem\",\r\n\r\n },\r\n // アイコンOFF状態\r\n iconGreen: {\r\n color: theme.palette.success.main,\r\n },\r\n // アイコンON状態\r\n iconRed: {\r\n color: theme.palette.error.main,\r\n },\r\n // アイコン未接続状態\r\n\r\n iconGray: {\r\n color: theme.palette.text.disabled,\r\n },\r\n }),\r\n);\r\n\r\n/** パラメーターカードの Props を提供します。 */\r\ninterface Props {\r\n /** タイトルを表します。 */\r\n title: string,\r\n /** ステータスの状態を表します。*/\r\n status?: MachineStatusMonitoringBoolState,\r\n};\r\n\r\n/** パラメーターカードを提供します。 */\r\nconst ParameterCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n\r\n function renderAlertStatus(status: MachineStatusMonitoringBoolState, title: string): JSX.Element {\r\n let result: JSX.Element;\r\n\r\n switch (status) {\r\n case MachineStatusMonitoringBoolState.NotAvailable:\r\n // 未接続\r\n result = (\r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ---\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n break;\r\n case MachineStatusMonitoringBoolState.On:\r\n // On状態\r\n result = (\r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ON\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n break;\r\n case MachineStatusMonitoringBoolState.Off:\r\n // Off状態\r\n result = (\r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n OFF\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n break;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n // CTU接続状態を確認\r\n props.status == null\r\n ? (\r\n // CTU未接続状態の場合\r\n \r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ---\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n : (\r\n // CTU接続中の場合\r\n <>\r\n {renderAlertStatus(props.status, props.title)}\r\n \r\n )\r\n }\r\n \r\n );\r\n\r\n};\r\n\r\nexport default ParameterCard;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n whiteSpace: \"nowrap\",\r\n },\r\n // バージョン情報\r\n version: {\r\n fontSize: \"1.25rem\",\r\n margin: \"0 0.5rem\",\r\n },\r\n }),\r\n);\r\n\r\n/** CTUバージョン情報の Props を提供します。 */\r\ninterface Props {\r\n /** バージョンを表します。 */\r\n version: string,\r\n};\r\n\r\n/** CTUバージョン情報を表示します。 */\r\nconst CtuVersionInformation: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n CTU バージョン:\r\n \r\n \r\n {props.version}\r\n \r\n \r\n );\r\n\r\n};\r\n\r\nexport default CtuVersionInformation;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n whiteSpace: \"nowrap\",\r\n },\r\n // IP アドレス情報\r\n ipAddress: {\r\n fontSize: \"1.25rem\",\r\n margin: \"0 0.5rem\",\r\n },\r\n }),\r\n);\r\n\r\n/** IP アドレス情報 の Props を提供します。 */\r\ninterface Props {\r\n /** IP アドレスを表します。 */\r\n ipAddress: string,\r\n};\r\n\r\n/** IPアドレス を表示します。 */\r\nconst IpAddressInformation: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n IP Address:\r\n \r\n \r\n {props.ipAddress}\r\n \r\n \r\n );\r\n\r\n};\r\n\r\nexport default IpAddressInformation;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport SyncIcon from '@material-ui/icons/Sync';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n whiteSpace: \"nowrap\",\r\n justifyContent: \"flex-end\",\r\n },\r\n // バージョン情報\r\n lastUpdatedAt: {\r\n fontSize: \"1.25rem\",\r\n margin: \"0 0.5rem\",\r\n\r\n },\r\n // 更新ボタン\r\n button: {\r\n minWidth: 0\r\n }\r\n }),\r\n);\r\n\r\n/** 更新エリア の Props を提供します。 */\r\ninterface Props extends ButtonProps {\r\n /** 最終更新日時を表します。 */\r\n lastUpdatedAt: string,\r\n};\r\n\r\n/** 更新エリアを表示します。 */\r\nconst UpdateItem: React.FC = (props) => {\r\n const { lastUpdatedAt, ...buttonProps } = props;\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n 最終更新日時:\r\n \r\n\r\n \r\n {lastUpdatedAt}\r\n \r\n\r\n {/* 更新ボタン */}\r\n \r\n \r\n \r\n \r\n );\r\n\r\n};\r\n\r\nexport default UpdateItem;\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n Box,\r\n Grid,\r\n} from '@material-ui/core';\r\n// components\r\nimport ControlMeterStatusCard from '../ControlMeterStatusCard';\r\nimport LiftingStatusCard from '../LiftingStatusCard';\r\nimport ConnectionStatusCard from '../ConnectionStatusCard';\r\nimport MeasuredCard from '../MeasuredCard';\r\nimport AlertParameterCard from '../AlertParameterCard';\r\nimport ParameterCard from '../ParameterCard';\r\nimport CtuVersionInformation from '../CtuVersionInformation';\r\nimport IpAddressInformation from '../IpAddressInformation';\r\nimport UpdateItem from '../../../Shared/UpdateItem';\r\nimport EcuErrorCard from '../EcuErrorCard';\r\nimport { MachineStatusMonitoringItem, MachineStatusControlMeterState } from '../../_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボックス\r\n box: {\r\n padding: theme.spacing(1),\r\n },\r\n // グリッドコンテナ\r\n gridContainer: {\r\n alignItems: \"center\",\r\n padding: theme.spacing(0, 1, 0, 1),\r\n },\r\n // グリッド ヘッダー\r\n gridHeader: {\r\n alignItems: \"center\",\r\n\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * 施工機ステータス Props の\r\n */\r\ninterface Props {\r\n /** 施工機ステータス情報を表します。 */\r\n data?: MachineStatusMonitoringItem,\r\n /** 管理計器ステータス情報を表します。 */\r\n machineStatus?: MachineStatusControlMeterState\r\n /** IPアドレスを表します。 */\r\n ipAddress: string,\r\n /** 最終更新日時を表します。 */\r\n lastUpdatedAt: string,\r\n /** 更新ボタンクリック時のイベント処理を表します。*/\r\n onUpdateClick: () => void,\r\n}\r\n\r\n/**\r\n * 施工機ステータス画面\r\n */\r\nconst MachineStatusMonitoringMain: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n\r\n {/* 上部 施工機情報 */}\r\n \r\n\r\n \r\n {/* CTU バージョン */}\r\n \r\n \r\n \r\n\r\n {/* IP アドレス */}\r\n \r\n \r\n \r\n\r\n {/* 更新エリア */}\r\n \r\n \r\n \r\n \r\n\r\n {/* データがない場合は何も表示しない */}\r\n {props.data ? (\r\n \r\n\r\n\r\n {/* 右側 状態表示 */}\r\n \r\n {/* 管理計器ステータスカード */}\r\n \r\n \r\n \r\n\r\n {/* 昇降状態カード */}\r\n \r\n \r\n \r\n\r\n {/* 自動制御接続カード*/}\r\n \r\n \r\n \r\n\r\n {/* ECUエラー */}\r\n \r\n \r\n \r\n\r\n {/* 非常停止状態 */}\r\n \r\n \r\n \r\n\r\n {/* フック過巻 */}\r\n \r\n \r\n \r\n\r\n {/* エンジン冷却水オーバーヒート */}\r\n \r\n \r\n \r\n\r\n {/* FAULTランプ出力 */}\r\n \r\n \r\n \r\n\r\n {/* 作動油温度警報 */}\r\n \r\n \r\n \r\n\r\n {/* バッテリー電圧警報 */}\r\n \r\n \r\n \r\n\r\n {/* パイロット圧低下警告灯 */}\r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* 左側 取得値 */}\r\n \r\n\r\n {/* 現在速度 */}\r\n \r\n \r\n \r\n\r\n {/* 現在深度 */}\r\n \r\n \r\n \r\n\r\n {/* 流量 1 */}\r\n \r\n \r\n \r\n\r\n {/* 流量 2 */}\r\n \r\n \r\n \r\n\r\n {/* 回転 1 */}\r\n \r\n \r\n \r\n\r\n {/* 回転 2 */}\r\n \r\n \r\n \r\n\r\n {/* 電流 1 */}\r\n \r\n \r\n \r\n\r\n {/* 電流 2 */}\r\n \r\n \r\n \r\n\r\n {/* 昇降圧力 */}\r\n \r\n \r\n \r\n\r\n {/* 最大昇降圧力[Pa] */}\r\n \r\n \r\n \r\n\r\n {/* 滑車ロードセルNo.1 */}\r\n \r\n \r\n \r\n\r\n {/* 昇降速度設定ボリューム */}\r\n \r\n \r\n \r\n\r\n {/* エンジン回転数 */}\r\n \r\n \r\n \r\n\r\n {/* 平均エンジン回転数[rpm] */}\r\n \r\n \r\n \r\n\r\n {/* 作動油温度 */}\r\n \r\n \r\n \r\n\r\n {/* 平均作動油温度[℃] */}\r\n \r\n \r\n \r\n\r\n {/* バッテリー電圧 */}\r\n \r\n \r\n \r\n\r\n {/* 平均バッテリー電圧[V] */}\r\n \r\n \r\n \r\n\r\n {/* フロントジャッキ圧力左 */}\r\n \r\n \r\n \r\n\r\n {/* フロントジャッキ圧力右 */}\r\n \r\n \r\n \r\n\r\n {/* リヤジャッキ圧力左 */}\r\n \r\n \r\n \r\n\r\n {/* リヤジャッキ圧力右 */}\r\n \r\n \r\n \r\n\r\n {/* 本体角度 X軸 */}\r\n \r\n \r\n \r\n\r\n {/* 本体角度 Y軸 */}\r\n \r\n \r\n \r\n\r\n {/* リーダー角 X軸 */}\r\n \r\n \r\n \r\n\r\n {/* リーダー角 Y軸 */}\r\n \r\n \r\n \r\n\r\n {/* ステーストローク長 左 */}\r\n \r\n \r\n \r\n\r\n {/* ステーストローク長 右 */}\r\n \r\n \r\n \r\n\r\n {/* メインポンプ稼働時間 */}\r\n \r\n \r\n \r\n\r\n {/* ギアポンプ稼働時間 */}\r\n \r\n \r\n \r\n\r\n {/* オーガー1稼働時間1 */}\r\n \r\n \r\n \r\n\r\n {/* オーガー2稼働時間2 */}\r\n \r\n \r\n \r\n\r\n {/* 本体稼働時間 */}\r\n \r\n \r\n \r\n\r\n {/* エンジン稼働時間 */}\r\n \r\n \r\n \r\n\r\n {/* クレーン昇降距離 */}\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n )\r\n : (<>)\r\n }\r\n \r\n \r\n );\r\n};\r\nexport default MachineStatusMonitoringMain;\r\n","//react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MachineStatusMonitoringSlice, onGetReloadAsync } from '../../../../../modules/slice/machine-status-monitoring/machine-status-monitoring-slice';\r\n// components\r\nimport { MachineStatusMonitoringItem } from '../../_types';\r\nimport MachineStatusMonitoringMain from './MachineStausMonitoringMain';\r\n\r\n/**\r\n * 施工機ステータス画面\r\n */\r\nexport const MachineStatusMonitoringMainContainer: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data = useSelector((state: RootState) => state.machineStatusMonitoring.result.item);\r\n const machineStatus = useSelector((state: RootState) => state.machineStatusMonitoring.result.machineStatus);\r\n const ipAddress = useSelector((state: RootState) => state.machineStatusMonitoring.result.ipAddress ?? \"\");\r\n const lastUpdatedAt = useSelector((state: RootState) => state.machineStatusMonitoring.result.lastUpdatedAt ?? \"\");\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onUpdateClick = async () => {\r\n\r\n if (!machine) {\r\n dispatch(MachineStatusMonitoringSlice.actions.showErrorMessage(`施工機情報がありません。`));\r\n return;\r\n }\r\n\r\n await dispatch(onGetReloadAsync({ id: machine.item.id }));\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","// redux\r\nimport { createSlice, SliceCaseReducers, ValidateSliceCaseReducers, PayloadAction } from '@reduxjs/toolkit';\r\n// component\r\nimport { Message } from '../../../components/MuiSnackbar/types';\r\nimport { CreateSliceUtility } from './create-slice-utility'\r\n\r\n/** ジェネリック型 State のインターフェースを提供します。 */\r\nexport interface GenericState {\r\n // 結果情報を表します。\r\n result: T,\r\n // ロード中かどうかを表します。\r\n isLoading: boolean,\r\n // メッセージを表示するかどうかを表します。\r\n isShowMessage: boolean,\r\n // メッセージを表します。\r\n message?: Message,\r\n\r\n isOpenViewer?: boolean,\r\n\r\n selectedReport?: boolean,\r\n}\r\n\r\n/**\r\n * slice オブジェクトを作成します。\r\n * @param name A string name for this slice of state. Generated action type constants will use this as a prefix.\r\n * @param initialState The initial state value for this slice of state.\r\n * @param reducers An object containing Redux \"case reducer\" functions (functions intended to handle a specific action type, equivalent to a single case statement in a switch).\r\n */\r\nexport const createGenericSlice = >>\r\n ({\r\n name = '',\r\n initialState,\r\n reducers\r\n }: {\r\n name: string\r\n initialState: GenericState\r\n reducers: ValidateSliceCaseReducers, Reducers>\r\n }) => {\r\n return createSlice({\r\n name,\r\n initialState,\r\n reducers: {\r\n\r\n /**\r\n * 通信開始処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchStart(state) {\r\n state.isLoading = true;\r\n state.isShowMessage = false;\r\n state.message = void 0;\r\n },\r\n\r\n /**\r\n * If you want to write to values of the state that depend on the generic\r\n * (in this case: `state.data`, which is T), you might need to specify the\r\n * State type manually here, as it defaults to `Draft>`,\r\n * which can sometimes be problematic with yet-unresolved generics.\r\n * This is a general problem when working with immer's Draft type and generics.\r\n */\r\n /**\r\n * 通信成功時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchSuccess(state: GenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result = action.payload;\r\n },\r\n\r\n /**\r\n * 通信失敗処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchFailure(state: GenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result = action.payload;\r\n },\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n */\r\n fetchEnd(state) {\r\n state.isLoading = false;\r\n },\r\n\r\n /**\r\n * メッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = action.payload;\r\n },\r\n\r\n /**\r\n * 通信成功時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showSuccessMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"success\",\r\n text: action.payload ?? CreateSliceUtility.DefualtSuccessMessage,\r\n }\r\n },\r\n\r\n /**\r\n * 通信失敗時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showErrorMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"error\",\r\n text: `Error : ${action.payload ?? CreateSliceUtility.DefualtErrorMessage}`,\r\n }\r\n },\r\n\r\n /**\r\n * メッセージの非表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n hideMessage(state) {\r\n state.isShowMessage = false;\r\n },\r\n\r\n ...reducers\r\n }\r\n })\r\n}\r\n","import { MachineErrorHistoryListItem, MachineErrorHistoryGraphItem } from '../../../pages/ConstructionMachineMaster/AlertRecord/_types';\r\nimport { MachineErrorHistoryItem, KeyValuePairOfDateTimeAndInteger } from '../../swagger-clients';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `アラート履歴` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MachineErrorHistoryUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(item?: MachineErrorHistoryItem[]): MachineErrorHistoryListItem[] {\r\n const result: MachineErrorHistoryListItem[] = [];\r\n if (item == null) {\r\n return result;\r\n }\r\n\r\n for (const source of item) {\r\n // 不正値は無視\r\n if (source.errorOccurredAt == null) {\r\n continue;\r\n }\r\n\r\n const item: MachineErrorHistoryListItem = {\r\n occurredAt: SharedUtility.toDateTimeString(new Date(source.errorOccurredAt)),\r\n detail: source.errorContent ?? \"\",\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 項目をグラフ用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toGraphItem(beginAt: Date | null, endAt: Date | null, item?: KeyValuePairOfDateTimeAndInteger[]): MachineErrorHistoryGraphItem[] {\r\n const result: MachineErrorHistoryGraphItem[] = [];\r\n if (item == null) {\r\n return result;\r\n }\r\n\r\n for (const source of item) {\r\n // 不正値は無視\r\n if (source.key == null) {\r\n continue;\r\n }\r\n\r\n const item: MachineErrorHistoryGraphItem = {\r\n dateAt: SharedUtility.toDateTimeString(new Date(source.key)),\r\n count: source.value,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MachineErrorHistoryClient, GetMachineErrorHistoryInput, GetMachineErrorHistoryOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MachineErrorHistoryRequest, MachineErrorHistoryResult } from './types';\r\nimport { MachineErrorHistoryUtility } from './machine-error-history-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `アラート履歴` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MachineErrorHistoryAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MachineErrorHistoryAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: MachineErrorHistoryRequest): Promise {\r\n function createErrorResult(message?: string): MachineErrorHistoryResult {\r\n return {\r\n listItems: [],\r\n graphItems: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetMachineErrorHistoryInput();\r\n input.init({\r\n machineId: parameter.item.machineId ?? \"\",\r\n beginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n endAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineErrorHistoryResult = {\r\n isError: false,\r\n listItems: MachineErrorHistoryUtility.toListItem(output.items),\r\n graphItems: MachineErrorHistoryUtility.toGraphItem(parameter.item.beginAt, parameter.item.endAt, output.counts),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MachineErrorHistoryClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { GenericState, createGenericSlice } from '../shared/create-generic-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\n// type\r\nimport { MachineErrorHistoryAdapter } from '../../adapter/machine-error-history/machine-error-history-adapter';\r\nimport { MachineErrorHistoryResult, MachineErrorHistoryRequest } from '../../adapter/machine-error-history/types';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: GenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n listItems: [],\r\n graphItems: [],\r\n isError: false,\r\n }\r\n}\r\n\r\n/** アラート履歴 Slice を 提供します。*/\r\nexport const MachineErrorHistorySlice = createGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'MachineErrorHistory',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: MachineErrorHistoryRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineErrorHistorySlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = MachineErrorHistoryAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.item.machineId });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n dispatch(MachineErrorHistorySlice.actions.fetchSuccess(getResult));\r\n\r\n\r\n if (getResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineErrorHistorySlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(MachineErrorHistorySlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n // メッセージ\r\n dispatch(MachineErrorHistorySlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(MachineErrorHistorySlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineErrorHistorySlice.actions.fetchEnd());\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Box, Card } from '@material-ui/core';\r\n\r\n/** アラート履歴画面の Props を提供します。 */\r\ninterface Props {\r\n /** テーブルのデータソースを表します。 */\r\n table: React.ReactNode,\r\n /** グラフのデータソースを表します。 */\r\n graph: React.ReactNode,\r\n};\r\n\r\n/**\r\n * アラート履歴画面を表示します。\r\n * */\r\nexport const AlertRecordMain: React.FC = (props) => {\r\n\r\n return (\r\n <>\r\n {/* テーブル */}\r\n {props.table}\r\n\r\n {/* グラフ */}\r\n \r\n \r\n {props.graph}\r\n \r\n \r\n \r\n\r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Box from '@material-ui/core/Box';\r\n// type\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n }),\r\n);\r\n\r\n/** アラート履歴画面 検索エリアの State を表示します。 */\r\nexport interface AlertRecordSerachState {\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n}\r\n\r\n/** アラート履歴画面 検索エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (event: React.MouseEvent, inputItem: AlertRecordSerachState) => void\r\n}\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n * */\r\nconst initState = (): AlertRecordSerachState => {\r\n\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n const result: AlertRecordSerachState = {\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** アラート履歴画面 検索エリアを提供します。*/\r\nconst AleartRecordSearch: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** useState を提供します。*/\r\n const [values, setValues] = useState(initState());\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(date)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(date)}\r\n />\r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(event, values)}\r\n />\r\n
\r\n \r\n );\r\n\r\n};\r\n\r\nexport default AleartRecordSearch;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/machine-error-history/machine-error-history-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\n// compoent\r\nimport AlertRecordSearch, { AlertRecordSerachState } from './AlertRecordSearch'\r\n// type\r\nimport { MachineErrorHistoryInputItem } from '../../_types';\r\n\r\n\r\n/** アラート履歴画面 検索エリアを提供します。*/\r\nexport const AlertRecordSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (event: React.MouseEvent, inputItem: AlertRecordSerachState) => {\r\n\r\n if (machine) {\r\n\r\n // 実行\r\n await dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n beginAt: inputItem.beginAt,\r\n endAt: inputItem.endAt,\r\n }\r\n }));\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// materiali-table\r\nimport MaterialTable, { Column } from 'material-table';\r\nimport Box from '@material-ui/core/Box';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// type\r\nimport { MachineErrorHistoryListItem } from '../../_types';\r\n// 共通 component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\nimport { ConstructionMchineMasterOptions } from '../../../Shared/ConstructionMchineMasterTableOptions';\r\nimport { useStyles } from '../../../Shared/ConstructionMchineMasterTableStyles';\r\n\r\n/** アラート履歴テーブル項目の Props を提供します。 */\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MachineErrorHistoryListItem[],\r\n};\r\n\r\n/** アラート履歴テーブル項目の State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/** アラート履歴テーブルのカラムを表します。 */\r\nconst columnData: Column[] = [\r\n {\r\n title: \"発生日時\",\r\n field: \"occurredAt\",\r\n width: 300,\r\n },\r\n {\r\n title: \"詳細\",\r\n field: \"detail\",\r\n render: (rowData: MachineErrorHistoryListItem) => (\r\n \r\n <>{rowData.detail}\r\n \r\n ),\r\n },\r\n];\r\n\r\n/** アラート履歴テーブルを提供します */\r\nconst AlertRecordTable: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** カラム情報を提供します。 */\r\n const [values] = useState({\r\n columns: columnData,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n};\r\n\r\nexport default AlertRecordTable;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport AlertRecordTable from './AlertRecordTable';\r\n\r\n/**\r\n * アラート履歴画面 テーブルを表示します。\r\n * */\r\nexport const AlertRecordTableContainer: React.FC<{}> = () => {\r\n\r\n // redux store\r\n const tableDataSource = useSelector((state: RootState) => state.machineErrorHistory.result.listItems);\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n />\r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { useTheme } from '@material-ui/core/styles';\r\n// recharts\r\nimport {\r\n BarChart,\r\n Bar,\r\n XAxis,\r\n YAxis,\r\n CartesianGrid,\r\n Tooltip,\r\n Brush,\r\n ResponsiveContainer,\r\n} from 'recharts';\r\n// type\r\nimport { MachineErrorHistoryGraphItem, MachineErrorHistoryGraphDisplayData } from '../../_types';\r\n\r\n/** アラート履歴グラフの Props を提供します。 */\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MachineErrorHistoryGraphDisplayData[],\r\n}\r\n\r\n/** アラート履歴画面 アラート件数グラフを提供します。 */\r\nconst AlertRecordGraph: React.FC = (props) => {\r\n\r\n /** テーマを提供します。 */\r\n const theme = useTheme();\r\n\r\n return (\r\n \r\n\r\n 1 ? void 0 : 30}\r\n maxBarSize={30}\r\n >\r\n {/* 格子 */}\r\n \r\n\r\n {/* X軸 */}\r\n new Date(unixTime).toLocaleDateString()}\r\n stroke={theme.palette.text.primary}\r\n tick={{\r\n fontSize: \"0.75rem\",\r\n wordWrap: \"break-word\",\r\n fill: theme.palette.text.secondary,\r\n }}\r\n angle={-35}\r\n textAnchor=\"end\"\r\n />\r\n\r\n {/* Y軸 */}\r\n \r\n\r\n {/* ツールチップ */}\r\n new Date(unixTime).toLocaleDateString()}\r\n cursor={{ width: 1, fill: theme.palette.text.secondary }}\r\n />\r\n\r\n {/* ブラシ(下のバー) */}\r\n {/* データが0の場合エラーになる */}\r\n {props.dataSource.length > 0 &&\r\n new Date(unixTime).toLocaleDateString()}\r\n />\r\n }\r\n\r\n \r\n\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default AlertRecordGraph;\r\n","import * as React from 'react';\r\nimport { MachineErrorHistoryGraphItem, MachineErrorHistoryGraphDisplayData } from '../../_types';\r\n\r\n/**\r\n * アラート記録グラフ 関連の ユーティリティ機能を提供します。\r\n * */\r\nexport class AlertRecordGraphUtility {\r\n //#region フィールド\r\n\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n *グラフ用データを変換します。\r\n * @param dataSource\r\n */\r\n public static toGraphData = (source: MachineErrorHistoryGraphItem[]): MachineErrorHistoryGraphDisplayData[] => {\r\n\r\n const result = source\r\n .filter(item => item.dateAt != null)\r\n .map((item) => {\r\n let graphData: MachineErrorHistoryGraphDisplayData\r\n graphData = {\r\n // 対象日 ミリ秒に変換\r\n dateAt: new Date(item.dateAt).getTime(),\r\n // アラート件数\r\n count: item.count,\r\n }\r\n return graphData;\r\n })\r\n .sort((a, b) => (a.dateAt - b.dateAt)); // 時系列順にソート\r\n\r\n return result;\r\n\r\n //#endregion メソッド\r\n\r\n\r\n\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport AlertRecordGraph from './AlertRecordGraph';\r\nimport { AlertRecordGraphUtility } from './AlertRecordGraphUtility';\r\n\r\n/**\r\n * アラート履歴画面 グラフを表示します。\r\n * */\r\nexport const AlertRecordGraphContainer: React.FC<{}> = () => {\r\n\r\n // redux store\r\n const graphDataSource = useSelector((state: RootState) => state.machineErrorHistory.result.graphItems);\r\n\r\n return (\r\n ({ ...item })))}\r\n />\r\n );\r\n};\r\n","import { AreaType, MachineType, KeyValueItem } from \"../../../../_types\";\r\nimport { InspectedStampItem, ReportItem } from \"../../_types\";\r\n\r\n\r\n/** 日常点検記録テーブル項目のインターフェイスを提供します。 */\r\nexport interface DailyInspectionRecordListItem {\r\n /** 記録表番号 を表します。 */\r\n readonly no: string;\r\n /** 完了日時を表します。 */\r\n readonly completionDate: string;\r\n /** 工法を表します。 */\r\n readonly constructionMethod: string;\r\n /** 作業者を表します。 */\r\n readonly worker: string;\r\n /** エリアを表します。 */\r\n readonly area: string;\r\n /** エリア種別を表します。*/\r\n readonly areaType: AreaType;\r\n /** 作業場所を表します。 */\r\n readonly site: string;\r\n /** 報告事項を表します。*/\r\n readonly report: string;\r\n /** 検印済みかどうかを表します。*/\r\n readonly isStamped: boolean;\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum DailyInspectionRecordSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 場所を表します。 */\r\n Place = 1,\r\n /** 作業者を表します。 */\r\n Worker = 2,\r\n /** 報告事項を表します。 */\r\n Report = 3,\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum StampSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 検印済を表します。 */\r\n Done = 1,\r\n /** 未検印を表します。 */\r\n NotYet = 2,\r\n}\r\n\r\n/**\r\n * 日常点検記録画面の入力項目のインターフェイスを提供します。\r\n * */\r\nexport interface DailyInspectionRecordInputItem {\r\n /** 社番を表します。 */\r\n machineId: string;\r\n /** 機器種別を表します。 */\r\n machineType: MachineType;\r\n /** キーワードを表します。 */\r\n keyword: string;\r\n /** 検索種別を表します。 */\r\n searchType: DailyInspectionRecordSearchType;\r\n /** 検印検索種別を表します。 */\r\n searchStampType: StampSearchType;\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n}\r\n\r\n/**\r\n * 帳票情報のインターフェイスを提供します。\r\n * */\r\nexport interface DailyInspectionReportItem extends ReportItem {\r\n /** 検印リストを表します。 */\r\n stampItems: KeyValueItem[]\r\n}\r\n","import { DailyInspectionRecordListItem, DailyInspectionRecordSearchType, StampSearchType } from '../../../pages/ConstructionMachineMaster/DailyInspectionRecord/_types';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\nimport { DailyInspectionRecordItem, DailyInspectionRecordSearchType as DtoSearchType, MachineType as DtoMachineType } from '../../swagger-clients';\r\n\r\n/**\r\n * `日常点検記録` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class DailyInspectionRecordUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: DailyInspectionRecordItem[]): DailyInspectionRecordListItem[] {\r\n const result: DailyInspectionRecordListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const dateAt = source.inspectionAt == null ? \"\" : SharedUtility.toDateString(new Date(source.inspectionAt));\r\n const item: DailyInspectionRecordListItem = {\r\n no: source.reportNo ?? \"\",\r\n completionDate: dateAt,\r\n constructionMethod: source.method ?? \"\",\r\n worker: source.worker ?? \"\",\r\n site: source.site ?? \"\",\r\n report: source.report ?? \"\",\r\n area: SharedUtility.toAreaText(source.areaId),\r\n areaType: SharedUtility.toAreaType(source.areaId),\r\n isStamped: source.isInspected\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検索キーワード種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSearchType(source: DailyInspectionRecordSearchType): DtoSearchType {\r\n const result: DtoSearchType | undefined =\r\n source === DailyInspectionRecordSearchType.None ? DtoSearchType.None :\r\n source === DailyInspectionRecordSearchType.Worker ? DtoSearchType.Worker :\r\n source === DailyInspectionRecordSearchType.Place ? DtoSearchType.Site :\r\n source === DailyInspectionRecordSearchType.Report ? DtoSearchType.Report :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toSearchType\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印の検索種別を変換します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toisInspected(source: StampSearchType): boolean | undefined {\r\n const result: boolean | undefined =\r\n source === StampSearchType.Done ? true :\r\n source === StampSearchType.NotYet ? false :\r\n void 0;\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { DailyInspectionRecordClient, GetDailyInspectionRecordInput, GetDocumentInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { DailyInspectionRecordGetRequest, DailyInspectionRecordGetResult, DailyInspectionRecordGetDocumentRequest, DailyInspectionRecordGetDocumentResult } from './types';\r\nimport { DailyInspectionRecordUtility } from './daily-inspection-record-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `日常点検記録` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class DailyInspectionRecordAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new DailyInspectionRecordAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: DailyInspectionRecordGetRequest): Promise {\r\n function createErrorResult(message?: string): DailyInspectionRecordGetResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetDailyInspectionRecordInput();\r\n input.init({\r\n machineId: parameter.item.machineId,\r\n machineType: SharedUtility.fromMachineType(parameter.item.machineType),\r\n searchType: DailyInspectionRecordUtility.toSearchType(parameter.item.searchType),\r\n searchWord: parameter.item.keyword,\r\n searchBeginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n searchEndAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n isInspected: DailyInspectionRecordUtility.toisInspected(parameter.item.searchStampType),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: DailyInspectionRecordGetResult = {\r\n isError: false,\r\n items: DailyInspectionRecordUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new DailyInspectionRecordClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { RecordsSliceState, createReportListSlice } from '../shared/create-records-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\n// type\r\nimport { DailyInspectionRecordAdapter } from '../../adapter/daily-inspection-record/daily-inspection-record-adapter';\r\nimport { DailyInspectionRecordGetRequest, DailyInspectionRecordGetResult, DailyInspectionRecordGetDocumentRequest, DailyInspectionRecordGetDocumentResult } from '../../adapter/daily-inspection-record/types';\r\nimport { DailyInspectionRecordListItem, DailyInspectionReportItem } from '../../../pages/ConstructionMachineMaster/DailyInspectionRecord/_types';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\nimport { DailyReportRequest, UpdateDailyReportRequest } from '../../adapter/report/type';\r\n\r\n\r\n// State の初期値を設定します。\r\nconst initialState: RecordsSliceState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n isOpenViewer: false,\r\n isUpdated: false,\r\n isReportLoading: false,\r\n}\r\n\r\n/** 日常点検記録 Slice を 提供します。*/\r\nexport const DailyInspectionRecordSlice = createReportListSlice({\r\n // State Reducer Action を生成\r\n name: 'DailyInspectionRecord',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: DailyInspectionRecordGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(DailyInspectionRecordSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = DailyInspectionRecordAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.item.machineId });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n if (getResult.isError) {\r\n // 異常\r\n dispatch(DailyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n dispatch(DailyInspectionRecordSlice.actions.setItems(getResult.items));\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(DailyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(DailyInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 帳票取得処理を行います。\r\n * @param parameter パラメーターを指定します。\r\n */\r\nexport const onGetDailyReportAsync = (parameter: DailyReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(DailyInspectionRecordSlice.actions.fetchStart());\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.getDailyReport(parameter);\r\n\r\n // 通信終了\r\n if (result.isError || result.stampItems == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(DailyInspectionRecordSlice.actions.setReport(\r\n {\r\n reportUrl: result.reportUrl,\r\n stampItems: result.stampItems,\r\n }\r\n ));\r\n dispatch(DailyInspectionRecordSlice.actions.toggleViewre(true));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(DailyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(DailyInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 検印更新処理を行います。\r\n * @param updateParam 更新パラメーターを指定します。\r\n * @param getParam 取得パラメーターを指定します。\r\n */\r\nexport const onUpdateDailyInspectedStampAsync = (updateParam: UpdateDailyReportRequest, getParam: DailyReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(DailyInspectionRecordSlice.actions.fetchStart());\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 更新フラグ OFF\r\n dispatch(DailyInspectionRecordSlice.actions.changeUpdatedFlag(false));\r\n\r\n // URL クリア\r\n dispatch(DailyInspectionRecordSlice.actions.clearReport());\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.updateDailyInspectedStamp(updateParam);\r\n\r\n // 通信終了\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 更新完了\r\n\r\n // 通信処理\r\n const getResult = await ReportAdapter.instance.getDailyReport(getParam);\r\n\r\n // 通信終了\r\n if (getResult.isError || getResult.stampItems == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n } else {\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(DailyInspectionRecordSlice.actions.setReport(\r\n {\r\n reportUrl: getResult.reportUrl,\r\n stampItems: getResult.stampItems,\r\n }\r\n ));\r\n dispatch(DailyInspectionRecordSlice.actions.changeUpdatedFlag(true));\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(DailyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(DailyInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n","import { AreaType, MachineType, KeyValueItem } from \"../../../../_types\";\r\nimport { InspectedStampItem, ReportItem } from \"../../_types\";\r\n\r\n/** 週間月例点検記録テーブル項目のインターフェイスを提供します。 */\r\nexport interface WeeklyInspectionRecordListItem {\r\n /** 記録表番号 を表します。 */\r\n readonly no: string;\r\n /** 完了日時を表します。 */\r\n readonly completionDate: string;\r\n /** 工法を表します。 */\r\n readonly constructionMethod: string;\r\n /** 作業者を表します。 */\r\n readonly worker: string;\r\n /** エリアを表します。 */\r\n readonly area: string;\r\n /** エリア種別を表します。*/\r\n readonly areaType: AreaType;\r\n /** 作業場所を表します。 */\r\n readonly site: string;\r\n /** 報告事項を表します。*/\r\n readonly report: string;\r\n /** 検印済みかどうかを表します。*/\r\n readonly isStamped: boolean;\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum WeeklyInspectionRecordSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 場所を表します。 */\r\n Place = 1,\r\n /** 作業者を表します。 */\r\n Worker = 2,\r\n /** 報告事項を表します。 */\r\n Report = 3,\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum StampSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 検印済を表します。 */\r\n Done = 1,\r\n /** 未検印を表します。 */\r\n NotYet = 2,\r\n}\r\n\r\n/**\r\n * 週間月例点検記録画面の入力項目のインターフェイスを提供します。\r\n * */\r\nexport interface WeeklyInspectionRecordInputItem {\r\n /** 社番を表します。 */\r\n machineId: string;\r\n /** 機器種別を表します。 */\r\n machineType: MachineType;\r\n /** キーワードを表します。 */\r\n keyword: string;\r\n /** 検索種別を表します。 */\r\n searchType: WeeklyInspectionRecordSearchType;\r\n /** 検印検索種別を表します。 */\r\n searchStampType: StampSearchType;\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n}\r\n\r\n/**\r\n * 帳票情報のインターフェイスを提供します。\r\n * */\r\nexport interface WeeklyInspectionReportItem extends ReportItem {\r\n /** 検印リストを表します。 */\r\n stampItems: KeyValueItem[]\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport MaterialTable, { MTableBodyRow, Column } from 'material-table';\r\nimport Box from '@material-ui/core/Box';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// type\r\nimport { DailyInspectionRecordListItem } from \"../../_types\";\r\n// 共通component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\nimport { ConstructionMchineMasterOptions } from '../../../Shared/ConstructionMchineMasterTableOptions';\r\nimport { useStyles } from '../../../Shared/ConstructionMchineMasterTableStyles';\r\nimport { ReportIconButton } from '../../../Shared/components/ReportIconButton/ReportIconButton';\r\n\r\n/** 日常点検記録テーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: DailyInspectionRecordListItem[],\r\n /** 帳票出力イベントを表します。 */\r\n onDocumentClickAysnc: (rowData: DailyInspectionRecordListItem) => void,\r\n}\r\n\r\n/** 日常点検記録のテーブルの State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/** 日常点検記録テーブルを提供します */\r\nconst DailyInspectionRecordTable: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 日常点検記録テーブルのカラムを表します。 */\r\n const columnData: Column[] = [\r\n {\r\n title: \"帳票\",\r\n field: \"isStamped\",\r\n width: 50,\r\n cellStyle: { padding: \"0px 5px\" },\r\n render: (rowData: DailyInspectionRecordListItem) => (\r\n \r\n rowData={rowData}\r\n onClick={props.onDocumentClickAysnc}\r\n />\r\n ),\r\n },\r\n {\r\n title: \"点検記録表 No.\",\r\n field: \"no\",\r\n },\r\n {\r\n title: \"点検完了日時\",\r\n field: \"completionDate\",\r\n\r\n },\r\n {\r\n title: \"工法\",\r\n field: \"constructionMethod\",\r\n },\r\n {\r\n title: \"所属\",\r\n field: \"area\",\r\n },\r\n {\r\n title: \"作業場所\",\r\n field: \"site\",\r\n },\r\n {\r\n title: \"作業者\",\r\n field: \"worker\",\r\n },\r\n {\r\n title: \"報告事項\",\r\n field: \"report\",\r\n cellStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n headerStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n render: (rowData: DailyInspectionRecordListItem) => (\r\n \r\n <>{rowData.report}\r\n \r\n ),\r\n },\r\n\r\n ];\r\n\r\n\r\n /** カラム情報を提供します。 */\r\n const [values, setValues] = useState({\r\n columns: columnData,\r\n });\r\n\r\n /**\r\n * ソート変更時のイベント処理を行います。\r\n * @param orderBy\r\n * @param orderDirection\r\n */\r\n const onOrderChange = (orderBy: number, orderDirection: \"asc\" | \"desc\"): void => {\r\n\r\n // 再レンダーされる時にソート順がリセットされないようにState で保持する\r\n setValues({\r\n columns: values.columns.map((column, index) => {\r\n if (index === orderBy) {\r\n column.defaultSort = orderDirection;\r\n } else {\r\n delete column.defaultSort\r\n }\r\n return column;\r\n })\r\n })\r\n };\r\n\r\n return (\r\n \r\n {\r\n return (\r\n props.onDocumentClickAysnc(props.data)}\r\n {...props}\r\n />\r\n )\r\n }\r\n }}\r\n onOrderChange={onOrderChange}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DailyInspectionRecordTable;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { DailyInspectionRecordSlice, onGetDailyReportAsync } from '../../../../../modules/slice/daily-inspection-record/daily-inspection-record-slice';\r\n// type\r\nimport { DailyInspectionRecordListItem } from \"../../_types\";\r\nimport { AreaType } from '../../../../../_types';\r\n// component\r\nimport DailyInspectionRecordTable from './DailyInspectionRecordTable';\r\n\r\n/** 日常点検記録テーブルを提供します */\r\nexport const DailyInspectionRecordTableContainer: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machineId = useSelector((state: RootState) => state.globalHeader.machine?.item.id ?? \"\");\r\n const data: DailyInspectionRecordListItem[] = useSelector((state: RootState) => state.dailyInspectionRecord.resultItems ?? []);\r\n const areaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * 帳票ボタンクリック時のイベント処理を行います。\r\n * @param rowData\r\n */\r\n const onDocumentClickAsync = async (rowData: DailyInspectionRecordListItem) => {\r\n if (!machineId) {\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(\"施工機情報がありません\"));\r\n }\r\n else {\r\n // 選択項目保存\r\n dispatch(DailyInspectionRecordSlice.actions.selectItem(rowData));\r\n // 通信\r\n await dispatch(onGetDailyReportAsync({\r\n machineId,\r\n reportAt: rowData.completionDate\r\n }));\r\n }\r\n\r\n }\r\n\r\n /**\r\n * エリア種別のフィルター処理を行います。\r\n * @param source テーブルデータを指定します。\r\n * @param areaType エリア種別を指定します。\r\n * @returns フィルタ後のテーブルデータを返します。\r\n */\r\n const areaTypeFilter = (source: DailyInspectionRecordListItem[], areaType: AreaType) => {\r\n\r\n // エリアが確定していない施工機は全国でしか表示しない。\r\n // material-tableにデータをそのまま渡すとErrorになるので複製・参照を切る\r\n return source.filter(item => (areaType === AreaType.None ? true : item.areaType === areaType)).map(item => ({ ...item }));\r\n\r\n }\r\n\r\n return (\r\n \r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n TextField,\r\n FormControlLabel,\r\n Box,\r\n RadioGroup,\r\n Radio,\r\n FormControl,\r\n} from '@material-ui/core';\r\n// component\r\nimport { DailyInspectionRecordSearchType, StampSearchType } from '../../_types';\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタン\r\n radioGroup: {\r\n display: \"inline-flex\",\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // グループ化 枠\r\n groupContainer: {\r\n position: \"relative\",\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderStyle: \"solid\",\r\n borderRadius: 4,\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n\r\n },\r\n // グループ化 タイトル\r\n groupTitle: {\r\n position: \"absolute\",\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n top: \"-12px\",\r\n left: \"-8px\",\r\n fontWeight: \"bold\",\r\n backgroundColor: theme.palette.background.paper,\r\n }\r\n }),\r\n);\r\n\r\n/** 日常点検記録画面 検索エリアの State を表示します。 */\r\nexport interface DailyInspectionRecordSearchState {\r\n /**キーワードを表します。 */\r\n keyword: string,\r\n /** 検索条件を表します。 */\r\n searchType: DailyInspectionRecordSearchType,\r\n /** 検索条件を表します。 */\r\n searchStampType: StampSearchType,\r\n /** 開始日を表します。 */\r\n beginAt: Date | null,\r\n /** 終了日を表します。 */\r\n endAt: Date | null,\r\n}\r\n\r\n/** 日常点検記録画面 検索エリアのPropsを表示します。 */\r\ninterface Props {\r\n /** 入力初期値を表します。 */\r\n initInputItem: DailyInspectionRecordSearchState,\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (inputItem: DailyInspectionRecordSearchState) => void\r\n}\r\n\r\n/** 日常点検記録画面 検索エリアを表示します。 */\r\nconst DailyInspectionSearch: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: DailyInspectionRecordSearchType.Place, label: \"作業場所\" },\r\n { key: DailyInspectionRecordSearchType.Worker, label: \"作業者\" },\r\n { key: DailyInspectionRecordSearchType.Report, label: \"報告事項\" },\r\n ];\r\n\r\n const stampSearchTypeRadioButton = [\r\n { key: StampSearchType.None, label: \"未指定\" },\r\n { key: StampSearchType.Done, label: \"検印済み\" },\r\n { key: StampSearchType.NotYet, label: \"検印なし\" },\r\n ]\r\n\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力項目を提供します。*/\r\n const [values, setValues] = useState(props.initInputItem);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof DailyInspectionRecordSearchState) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n return (\r\n \r\n\r\n
\r\n \r\n 検索範囲\r\n \r\n\r\n \r\n\r\n \r\n\r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n
\r\n\r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(data)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(data)}\r\n />\r\n\r\n \r\n 検印\r\n \r\n\r\n \r\n\r\n {stampSearchTypeRadioButton.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(values)}\r\n />\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default DailyInspectionSearch;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/daily-inspection-record/daily-inspection-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport DailyInspectionSearch, { DailyInspectionRecordSearchState } from './DailyInspectionSearch';\r\nimport { DailyInspectionRecordSearchType, StampSearchType } from '../../_types';\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n * */\r\nconst initState = (): DailyInspectionRecordSearchState => {\r\n\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n const result: DailyInspectionRecordSearchState = {\r\n keyword: \"\",\r\n searchType: DailyInspectionRecordSearchType.Report,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** 日常点検記録画面 検索エリアを表示します。 */\r\nexport const DailyInspectionSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.dailyInspectionRecord?.isUpdated ?? false);\r\n const isOpenViewer = useSelector((state: RootState) => state.dailyInspectionRecord.isOpenViewer ?? true);\r\n\r\n const [value, setValue] = useState(initState);\r\n\r\n useEffect(() => {\r\n\r\n if (isUpdated && !isOpenViewer && machine) {\r\n onSearchClickAsync(value);\r\n }\r\n\r\n }, [machine, isUpdated, isOpenViewer, value, dispatch]);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (inputItem: DailyInspectionRecordSearchState) => {\r\n setValue(inputItem);\r\n\r\n if (machine) {\r\n\r\n // 実行\r\n await dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: inputItem.keyword,\r\n searchType: inputItem.searchType,\r\n searchStampType: inputItem.searchStampType,\r\n beginAt: inputItem.beginAt,\r\n endAt: inputItem.endAt,\r\n }\r\n }));\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { FormControl, TextField, MenuItem, Divider, FormGroup, FormControlLabel, FormLabel, Checkbox, FormHelperText, Box } from '@material-ui/core';\r\nimport { KeyValueItem, DayOfWeek } from '../../../../../_types';\r\nimport { InspectedStampItem, UpdateInspectedStampListItem } from '../../../_types';\r\nimport MuiBackToListButton from '../../../../../components/Buttons/MuiBackToListButton';\r\nimport MuiUpdateButton from '../../../../../components/Buttons/MuiUpdateButton';\r\nimport InspectionConfirmDialog from '../../../Shared/components/ComfirmDialog/InspectionStampConfirmDialog';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\nimport AccountBoxIcon from '@material-ui/icons/AccountBox';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // 区切り線\r\n divider: {\r\n marginBottom: theme.spacing(4),\r\n },\r\n // 検印者\r\n inspector: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '1.25rem',\r\n },\r\n // 検印者名\r\n name: {\r\n margin: 'auto',\r\n }\r\n }),\r\n);\r\n\r\n/** 日常点検の検印エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 検印者名を表します。 */\r\n inspector: string;\r\n /** 検印された日付を表します。 */\r\n stampDatas: KeyValueItem[],\r\n /** 更新ボタンのクリック処理を表します。 */\r\n onUpdateClick: (inputItems: UpdateInspectedStampListItem[]) => void,\r\n /** 戻るボタンのクリック処理を表します。 */\r\n onBackClick: () => void\r\n /** 帳票が更新されたかどうかを表します。 */\r\n isUpdated: boolean,\r\n}\r\n\r\n/**\r\n * State の初期化を行います。\r\n * @param source 検印情報を指定します。\r\n * @returns 配列を返します。\r\n */\r\nconst initState = (source: KeyValueItem[]): DayOfWeek[] => {\r\n return source.reduce((result: DayOfWeek[], item) => {\r\n if (item.value.exist && item.value.isStamped) {\r\n result.push(item.key);\r\n }\r\n return result;\r\n }, []);\r\n}\r\n\r\n/** 検印選択エリアを表示します。*/\r\nconst InspectionStampForm: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** ダイアログの開閉状態を表します。 */\r\n const [open, setOpen] = React.useState(false);\r\n\r\n /** 検印選択情報を表します。 */\r\n const [checkedValues, setCheckedValues] = React.useState(initState(props.stampDatas));\r\n\r\n useEffect(() => {\r\n if (props.isUpdated) {\r\n setOpen(false);\r\n }\r\n }, [props.isUpdated])\r\n\r\n useEffect(() => {\r\n setCheckedValues(initState(props.stampDatas));\r\n }, [props.stampDatas])\r\n\r\n /**\r\n * チェックボックスの選択処理を行います。\r\n * @param checkedId\r\n */\r\n const handleSelect = (checkedId: DayOfWeek) => {\r\n const newIds = checkedValues?.includes(checkedId)\r\n ? checkedValues?.filter(val => val !== checkedId)\r\n : [...(checkedValues ?? []), checkedId];\r\n\r\n setCheckedValues(newIds);\r\n }\r\n\r\n /** ダイアログを開きます。 */\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n /** ダイアログを閉じます。 */\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n /**\r\n * 更新処理を行います。\r\n */\r\n const onUpdateExecute = () => {\r\n props.onUpdateClick(ConstructionMacineMasterUtility.convertDailyListItem(props.stampDatas, checkedValues, props.inspector));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {/* 戻るボタン */}\r\n \r\n\r\n \r\n\r\n {/* 検印者 */}\r\n \r\n 検印者\r\n \r\n
\r\n \r\n \r\n {props.inspector}\r\n \r\n
\r\n\r\n {/* 検印選択 */}\r\n \r\n \r\n 検印選択\r\n \r\n \r\n {props.stampDatas.map((data, index) =>\r\n handleSelect(data.key)}\r\n />\r\n }\r\n />\r\n )}\r\n \r\n \r\n\r\n {/* 更新ボタン */}\r\n \r\n\r\n
\r\n\r\n\r\n {/* 確認ダイアログ */}\r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport default InspectionStampForm;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DailyInspectionRecordSlice, onUpdateDailyInspectedStampAsync } from '../../../../../modules/slice/daily-inspection-record/daily-inspection-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { KeyValueItem, DayOfWeek } from '../../../../../_types';\r\nimport { InspectedStampItem, UpdateInspectedStampListItem, StampUpdateStaus } from '../../../_types';\r\nimport InspectionStampForm from './InspectionStampForm';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\n\r\n/** 検印エリアを表示します。 */\r\nexport const StampContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const inspector = useSelector((state: RootState) => state.authentication?.user?.inspectorName ?? \"\");\r\n const inspectionStampItems: KeyValueItem[] = useSelector((state: RootState) => state.dailyInspectionRecord?.report?.stampItems ?? []);\r\n const selectedItem = useSelector((state: RootState) => state.dailyInspectionRecord?.selectedItem);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.dailyInspectionRecord?.isUpdated ?? false);\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onUpdateClick = async (inputItems: UpdateInspectedStampListItem[]) => {\r\n if (!machine) {\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(\"施工機情報がありません。\"));\r\n } else if (!inspector) {\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(\"検印者情報がありません。\"));\r\n } else if (!selectedItem) {\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(\"選択項目の情報がありません。\"));\r\n } else if (!inspectionStampItems.length) {\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(\"帳票情報がありません。\"));\r\n } else {\r\n // 検印更新\r\n dispatch(onUpdateDailyInspectedStampAsync(\r\n {\r\n items: ConstructionMacineMasterUtility.toUpdateDailyInspectedStampItem(inputItems),\r\n },\r\n {\r\n machineId: machine.item.id,\r\n reportAt: selectedItem.completionDate\r\n }\r\n ))\r\n }\r\n };\r\n\r\n\r\n\r\n /** 戻るボタンのクリック処理を行います。 */\r\n const onBackClick = () => {\r\n // ビューワを閉じる\r\n dispatch(DailyInspectionRecordSlice.actions.toggleViewre(false));\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport ReportViewer from '../../../Shared/components/ReportViewer/ReportViewer';\r\nimport { DailyInspectionRecordSlice } from '../../../../../modules/slice/daily-inspection-record/daily-inspection-record-slice';\r\n\r\n/** 帳票ビューワを表示します。 */\r\nexport const ViewerContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const reportUrl: string = useSelector((state: RootState) => state.dailyInspectionRecord?.report?.reportUrl ?? \"\");\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(DailyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import { WeeklyInspectionRecordListItem, WeeklyInspectionRecordSearchType, StampSearchType } from '../../../pages/ConstructionMachineMaster/WeeklyInspectionRecord/_types';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\nimport { WeeklyInspectionRecordItem, WeeklyInspectionRecordSearchType as DtoSearchType, MachineType as DtoMachineType } from '../../swagger-clients';\r\n\r\n/**\r\n * `週間月例点検記録` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class WeeklyInspectionRecordUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: WeeklyInspectionRecordItem[]): WeeklyInspectionRecordListItem[] {\r\n const result: WeeklyInspectionRecordListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const dateAt = source.inspectionAt == null ? \"\" : SharedUtility.toDateString(new Date(source.inspectionAt));\r\n const item: WeeklyInspectionRecordListItem = {\r\n no: source.reportNo ?? \"\",\r\n completionDate: dateAt,\r\n constructionMethod: source.method ?? \"\",\r\n worker: source.worker ?? \"\",\r\n site: source.site ?? \"\",\r\n report: source.report ?? \"\",\r\n area: SharedUtility.toAreaText(source.areaId),\r\n areaType: SharedUtility.toAreaType(source.areaId),\r\n isStamped: source.isInspected\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検索キーワード種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSearchType(source: WeeklyInspectionRecordSearchType): DtoSearchType {\r\n const result: DtoSearchType | undefined =\r\n source === WeeklyInspectionRecordSearchType.None ? DtoSearchType.None :\r\n source === WeeklyInspectionRecordSearchType.Worker ? DtoSearchType.Worker :\r\n source === WeeklyInspectionRecordSearchType.Place ? DtoSearchType.Site :\r\n source === WeeklyInspectionRecordSearchType.Report ? DtoSearchType.Report :\r\n void 0;\r\n\r\n if (result == null) {\r\n throw new Error(\"toSearchType\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印の検索種別を変換します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toisInspected(source: StampSearchType): boolean | undefined {\r\n const result: boolean | undefined =\r\n source === StampSearchType.Done ? true :\r\n source === StampSearchType.NotYet ? false :\r\n void 0;\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { WeeklyInspectionRecordClient, GetWeeklyInspectionRecordInput, GetDocumentInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { WeeklyInspectionRecordGetRequest, WeeklyInspectionRecordGetResult, WeeklyInspectionRecordGetDocumentRequest, WeeklyInspectionRecordGetDocumentResult } from './types';\r\nimport { WeeklyInspectionRecordUtility } from './weekly-inspection-record-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `週間月例点検記録` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class WeeklyInspectionRecordAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new WeeklyInspectionRecordAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: WeeklyInspectionRecordGetRequest): Promise {\r\n function createErrorResult(message?: string): WeeklyInspectionRecordGetResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetWeeklyInspectionRecordInput();\r\n input.init({\r\n machineId: parameter.item.machineId,\r\n machineType: SharedUtility.fromMachineType(parameter.item.machineType),\r\n searchType: WeeklyInspectionRecordUtility.toSearchType(parameter.item.searchType),\r\n searchWord: parameter.item.keyword,\r\n searchBeginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n searchEndAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n isInspected: WeeklyInspectionRecordUtility.toisInspected(parameter.item.searchStampType),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: WeeklyInspectionRecordGetResult = {\r\n isError: false,\r\n items: WeeklyInspectionRecordUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new WeeklyInspectionRecordClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { RecordsSliceState, createReportListSlice } from '../shared/create-records-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\n// type\r\nimport { WeeklyInspectionRecordAdapter } from '../../adapter/weekly-inspection-record/weekly-inspection-record-adapter';\r\nimport { WeeklyInspectionRecordGetRequest, WeeklyInspectionRecordGetResult, WeeklyInspectionRecordGetDocumentRequest, WeeklyInspectionRecordGetDocumentResult } from '../../adapter/weekly-inspection-record/types';\r\nimport { WeeklyInspectionRecordListItem, WeeklyInspectionReportItem } from '../../../pages/ConstructionMachineMaster/WeeklyInspectionRecord/_types';\r\nimport { WeeklyReportRequest, UpdateWeeklyReportRequest } from '../../adapter/report/type';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: RecordsSliceState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n isOpenViewer: false,\r\n isUpdated: false,\r\n isReportLoading: false,\r\n}\r\n\r\n/** 週間月例点検記録 Slice を 提供します。*/\r\nexport const WeeklyInspectionRecordSlice = createReportListSlice({\r\n // State Reducer Action を生成\r\n name: ' WeeklyInspectionRecord',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter 要求情報を指定します。\r\n */\r\nexport const onGetAsync = (parameter: WeeklyInspectionRecordGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = WeeklyInspectionRecordAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.item.machineId });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n if (getResult.isError) {\r\n // 異常\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchFailure());\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n dispatch(WeeklyInspectionRecordSlice.actions.setItems(getResult.items));\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 帳票取得処理を行います。\r\n * @param parameter パラメーターを指定します。\r\n */\r\nexport const onGetWeeklyReportAsync = (parameter: WeeklyReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchStart());\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.getWeeklyReport(parameter);\r\n\r\n // 通信終了\r\n if (result.isError || result.stampItems == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(WeeklyInspectionRecordSlice.actions.setReport(\r\n {\r\n reportUrl: result.reportUrl,\r\n stampItems: result.stampItems,\r\n }\r\n ));\r\n dispatch(WeeklyInspectionRecordSlice.actions.toggleViewre(true));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 検印更新処理を行います。\r\n * @param updateParam 更新パラメーターを指定します。\r\n * @param getParam 取得パラメーターを指定します。\r\n */\r\nexport const onUpdateWeeklyInspectedStampAsync = (updateParam: UpdateWeeklyReportRequest, getParam: WeeklyReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchStart());\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 更新フラグ OFF\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeUpdatedFlag(false));\r\n\r\n // URL クリア\r\n dispatch(WeeklyInspectionRecordSlice.actions.clearReport());\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.updateWeeklyInspectedStamp(updateParam);\r\n\r\n // 通信終了\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 更新完了\r\n\r\n // 通信処理\r\n const getResult = await ReportAdapter.instance.getWeeklyReport(getParam);\r\n\r\n // 通信終了\r\n if (getResult.isError || getResult.stampItems == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(WeeklyInspectionRecordSlice.actions.setReport(\r\n {\r\n reportUrl: getResult.reportUrl,\r\n stampItems: getResult.stampItems,\r\n }\r\n ));\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeUpdatedFlag(true));\r\n }\r\n }\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(WeeklyInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n","import { AreaType, MachineType } from \"../../../../_types\";\r\nimport { InspectedStampItem, ReportItem } from \"../../_types\";\r\n\r\n/** 現場完了時点検記録テーブル項目のインターフェイスを提供します。 */\r\nexport interface CompletionInspectionRecordListItem {\r\n /** 記録表番号 を表します。 */\r\n readonly no: string;\r\n /** 完了日時を表します。 */\r\n readonly completionDate: string;\r\n /** 工法を表します。 */\r\n readonly constructionMethod: string;\r\n /** 作業者を表します。 */\r\n readonly worker: string;\r\n /** エリアを表します。 */\r\n readonly area: string;\r\n /** エリア種別を表します。*/\r\n readonly areaType: AreaType;\r\n /** 作業場所を表します。 */\r\n readonly site: string;\r\n /** 報告事項を表します。*/\r\n readonly report: string;\r\n /** 検印済みかどうかを表します。*/\r\n readonly isStamped: boolean;\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum CompletionInspectionRecordSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 場所を表します。 */\r\n Place = 1,\r\n /** 作業者を表します。 */\r\n Worker = 2,\r\n /** 報告事項を表します。 */\r\n Report = 3,\r\n}\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum StampSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 検印済を表します。 */\r\n Done = 1,\r\n /** 未検印を表します。 */\r\n NotYet = 2,\r\n}\r\n\r\n/**\r\n * 現場完了時点検記録画面の入力項目のインターフェイスを提供します。\r\n * */\r\nexport interface CompletionInspectionRecordInputItem {\r\n /** 社番を表します。 */\r\n machineId: string;\r\n /** 機器種別を表します。 */\r\n machineType: MachineType;\r\n /** キーワードを表します。 */\r\n keyword: string;\r\n /** 検索種別を表します。 */\r\n searchType: CompletionInspectionRecordSearchType;\r\n /** 検印検索種別を表します。 */\r\n searchStampType: StampSearchType;\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n}\r\n\r\n/**\r\n * 帳票情報のインターフェイスを提供します。\r\n * */\r\nexport interface CompletionInspectionReportItem extends ReportItem {\r\n /** 検印情報を表します。 */\r\n stampItem: InspectedStampItem,\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport MaterialTable, { MTableBodyRow, Column } from 'material-table';\r\nimport Box from '@material-ui/core/Box';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// type\r\nimport { WeeklyInspectionRecordListItem } from \"../../_types\";\r\n// 共通component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\nimport { ConstructionMchineMasterOptions } from '../../../Shared/ConstructionMchineMasterTableOptions';\r\nimport { useStyles } from '../../../Shared/ConstructionMchineMasterTableStyles';\r\nimport { ReportIconButton } from '../../../Shared/components/ReportIconButton/ReportIconButton';\r\n\r\n/** 週間月例点検記録テーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: WeeklyInspectionRecordListItem[],\r\n /** 帳票出力イベントを表します。 */\r\n onDocumentClickAysnc: (rowData: WeeklyInspectionRecordListItem) => void,\r\n}\r\n\r\n/** 週間月例点検記録テーブルの State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/** 週間月例点検記録テーブルを提供します */\r\nconst WeeklyInspectionRecordTable: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 週間月例点検記録テーブルのカラムを表します。 */\r\n const columnData: Column[] = [\r\n {\r\n title: \"帳票\",\r\n field: \"isStamped\",\r\n width: 50,\r\n cellStyle: { padding: \"0px 5px\" },\r\n render: (rowData: WeeklyInspectionRecordListItem) => (\r\n \r\n rowData={rowData}\r\n onClick={props.onDocumentClickAysnc}\r\n />\r\n ),\r\n },\r\n {\r\n title: \"点検記録表 No.\",\r\n field: \"no\",\r\n },\r\n {\r\n title: \"点検完了日時\",\r\n field: \"completionDate\",\r\n\r\n },\r\n {\r\n title: \"工法\",\r\n field: \"constructionMethod\",\r\n },\r\n {\r\n title: \"所属\",\r\n field: \"area\",\r\n },\r\n {\r\n title: \"作業場所\",\r\n field: \"site\",\r\n },\r\n {\r\n title: \"作業者\",\r\n field: \"worker\",\r\n },\r\n {\r\n title: \"報告事項\",\r\n field: \"report\",\r\n cellStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n headerStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n render: (rowData: WeeklyInspectionRecordListItem) => (\r\n \r\n <>{rowData.report}\r\n \r\n ),\r\n },\r\n\r\n ];\r\n\r\n /** カラム情報を提供します。 */\r\n const [values, setValues] = useState({\r\n columns: columnData,\r\n });\r\n\r\n /**\r\n* ソート変更時のイベント処理を行います。\r\n* @param orderBy\r\n* @param orderDirection\r\n*/\r\n const onOrderChange = (orderBy: number, orderDirection: \"asc\" | \"desc\"): void => {\r\n\r\n // 再レンダーされる時にソート順がリセットされないようにState で保持する\r\n setValues({\r\n columns: values.columns.map((column, index) => {\r\n if (index === orderBy) {\r\n column.defaultSort = orderDirection;\r\n } else {\r\n delete column.defaultSort\r\n }\r\n return column;\r\n })\r\n })\r\n };\r\n\r\n return (\r\n \r\n {\r\n return (\r\n props.onDocumentClickAysnc(rowProps.data)}\r\n {...rowProps}\r\n />\r\n )\r\n }\r\n }}\r\n onOrderChange={onOrderChange}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default WeeklyInspectionRecordTable;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { WeeklyInspectionRecordSlice, onGetWeeklyReportAsync } from '../../../../../modules/slice/weekly-inspection-record/weekly-inspection-record-slice';\r\n// type\r\nimport { WeeklyInspectionRecordListItem } from \"../../_types\";\r\nimport { AreaType } from '../../../../../_types';\r\n// component\r\nimport WeeklyInspectionRecordTable from './WeeklyInspectionRecordTable';\r\n\r\n/** 週間月例点検記録テーブルを提供します */\r\nexport const WeeklyInspectionRecordTableContainer: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machineId = useSelector((state: RootState) => state.globalHeader.machine?.item.id ?? \"\");\r\n const data: WeeklyInspectionRecordListItem[] = useSelector((state: RootState) => state.weeklyInspectionRecord.resultItems ?? []);\r\n const areaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * 帳票ボタンクリック時のイベント処理を行います。\r\n * @param rowData\r\n */\r\n const onDocumentClickAsync = async (rowData: WeeklyInspectionRecordListItem) => {\r\n\r\n if (!machineId) {\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(\"施工機情報がありません\"));\r\n }\r\n else {\r\n // 選択項目保存\r\n dispatch(WeeklyInspectionRecordSlice.actions.selectItem(rowData));\r\n // 通信\r\n await dispatch(onGetWeeklyReportAsync({\r\n machineId,\r\n reportAt: rowData.completionDate\r\n }));\r\n }\r\n\r\n }\r\n\r\n /**\r\n * エリア種別のフィルター処理を行います。\r\n * @param source テーブルデータを指定します。\r\n * @param areaType エリア種別を指定します。\r\n * @returns フィルタ後のテーブルデータを返します。\r\n */\r\n const areaTypeFilter = (source: WeeklyInspectionRecordListItem[], areaType: AreaType) => {\r\n\r\n // エリアが確定していない施工機は全国でしか表示しない。\r\n // material-tableにデータをそのまま渡すとErrorになるので複製・参照を切る\r\n return source.filter(item => (areaType === AreaType.None ? true : item.areaType === areaType)).map(item => ({ ...item }));\r\n\r\n }\r\n\r\n return (\r\n \r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n TextField,\r\n FormControlLabel,\r\n Box,\r\n RadioGroup,\r\n Radio,\r\n FormControl,\r\n} from '@material-ui/core';\r\n// component\r\nimport { WeeklyInspectionRecordSearchType, StampSearchType } from '../../_types';\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタン\r\n radioGroup: {\r\n display: \"inline-flex\",\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // グループ化 枠\r\n groupContainer: {\r\n position: \"relative\",\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderStyle: \"solid\",\r\n borderRadius: 4,\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n\r\n },\r\n // グループ化 タイトル\r\n groupTitle: {\r\n position: \"absolute\",\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n top: \"-12px\",\r\n left: \"-8px\",\r\n fontWeight: \"bold\",\r\n backgroundColor: theme.palette.background.paper,\r\n }\r\n }),\r\n);\r\n\r\n/** 週間月例点検記録画面 検索エリアの State を表示します。 */\r\nexport interface WeeklyInspectionRecordSearchState {\r\n /**キーワードを表します。 */\r\n keyword: string,\r\n /** 検索条件を表します。 */\r\n searchType: WeeklyInspectionRecordSearchType,\r\n /** 検索条件を表します。 */\r\n searchStampType: StampSearchType,\r\n /** 開始日を表します。 */\r\n beginAt: Date | null,\r\n /** 終了日を表します。 */\r\n endAt: Date | null,\r\n}\r\n\r\n/** 週間月例点検記録画面 検索エリアのPropsを表示します。 */\r\ninterface Props {\r\n /** 入力初期値を表します。 */\r\n initInputItem: WeeklyInspectionRecordSearchState,\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (inputItem: WeeklyInspectionRecordSearchState) => void\r\n}\r\n\r\n/** 週間月例点検記録画面 検索エリアを表示します。 */\r\nconst WeeklyInspectionSearch: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: WeeklyInspectionRecordSearchType.Place, label: \"作業場所\" },\r\n { key: WeeklyInspectionRecordSearchType.Worker, label: \"作業者\" },\r\n { key: WeeklyInspectionRecordSearchType.Report, label: \"報告事項\" },\r\n ];\r\n const stampSearchTypeRadioButton = [\r\n { key: StampSearchType.None, label: \"未指定\" },\r\n { key: StampSearchType.Done, label: \"検印済み\" },\r\n { key: StampSearchType.NotYet, label: \"検印なし\" },\r\n ];\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力項目を提供します。*/\r\n const [values, setValues] = useState(props.initInputItem);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof WeeklyInspectionRecordSearchState) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n\r\n return (\r\n \r\n\r\n
\r\n \r\n 検索範囲\r\n \r\n\r\n \r\n\r\n \r\n\r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n
\r\n\r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(data)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(data)}\r\n />\r\n\r\n \r\n 検印\r\n \r\n\r\n \r\n\r\n {stampSearchTypeRadioButton.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(values)}\r\n />\r\n\r\n
\r\n );\r\n\r\n};\r\n\r\nexport default WeeklyInspectionSearch;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/weekly-inspection-record/weekly-inspection-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport WeeklyInspectionSearch, { WeeklyInspectionRecordSearchState } from './WeeklyInspectionSearch';\r\nimport { WeeklyInspectionRecordSearchType, StampSearchType } from '../../_types';\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n * */\r\nconst initState = (): WeeklyInspectionRecordSearchState => {\r\n\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n const result: WeeklyInspectionRecordSearchState = {\r\n keyword: \"\",\r\n searchType: WeeklyInspectionRecordSearchType.Report,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** 週間月例点検記録画面 検索エリアを表示します。 */\r\nexport const WeeklyInspectionSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.weeklyInspectionRecord?.isUpdated ?? false);\r\n const isOpenViewer = useSelector((state: RootState) => state.weeklyInspectionRecord.isOpenViewer ?? true);\r\n\r\n const [value, setValue] = useState(initState);\r\n\r\n useEffect(() => {\r\n\r\n if (isUpdated && !isOpenViewer && machine) {\r\n onSearchClickAsync(value);\r\n }\r\n\r\n }, [machine, isUpdated, isOpenViewer, value, dispatch]);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (inputItem: WeeklyInspectionRecordSearchState) => {\r\n setValue(inputItem);\r\n\r\n if (machine) {\r\n // 実行\r\n await dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: inputItem.keyword,\r\n searchType: inputItem.searchType,\r\n searchStampType: inputItem.searchStampType,\r\n beginAt: inputItem.beginAt,\r\n endAt: inputItem.endAt,\r\n }\r\n }));\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { FormControl, TextField, MenuItem, Divider, FormGroup, FormControlLabel, FormLabel, Checkbox, FormHelperText, Box } from '@material-ui/core';\r\nimport { KeyValueItem, WeekOfMonth } from '../../../../../_types';\r\nimport { InspectedStampItem, UpdateInspectedStampListItem } from '../../../_types';\r\nimport MuiBackToListButton from '../../../../../components/Buttons/MuiBackToListButton';\r\nimport MuiUpdateButton from '../../../../../components/Buttons/MuiUpdateButton';\r\nimport InspectionConfirmDialog from '../../../Shared/components/ComfirmDialog/InspectionStampConfirmDialog';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\nimport AccountBoxIcon from '@material-ui/icons/AccountBox';\r\n\r\n/** 週間月例点検の検印エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 検印者名を表します。 */\r\n inspector: string;\r\n /** 検印された日付を表します。 */\r\n stampDatas: KeyValueItem[],\r\n /** 更新ボタンのクリック処理を表します。 */\r\n onUpdateClick: (inputItems: UpdateInspectedStampListItem[]) => void,\r\n /** 戻るボタンのクリック処理を表します。 */\r\n onBackClick: () => void,\r\n /** 帳票が更新されたかどうかを表します。 */\r\n isUpdated: boolean,\r\n}\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // 区切り線\r\n divider: {\r\n marginBottom: theme.spacing(4),\r\n },\r\n // 検印者\r\n inspector: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '1.25rem',\r\n },\r\n // 検印者名\r\n name: {\r\n margin: 'auto',\r\n }\r\n }),\r\n);\r\n\r\n\r\n/**\r\n * State の初期化を行います。\r\n * @param source 検印情報を指定します。\r\n * @returns 配列を返します。\r\n */\r\nconst initState = (source: KeyValueItem[]): WeekOfMonth[] => {\r\n return source.reduce((result: WeekOfMonth[], item) => {\r\n if (item.value.exist && item.value.isStamped) {\r\n result.push(item.key);\r\n }\r\n return result;\r\n }, []);\r\n}\r\n\r\n/** 検印選択エリアを表示します。*/\r\nconst InspectionStampForm: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** ダイアログの開閉状態を表します。 */\r\n const [open, setOpen] = React.useState(false);\r\n\r\n /** 検印選択情報を表します。 */\r\n const [checkedValues, setCheckedValues] = React.useState(initState(props.stampDatas));\r\n\r\n useEffect(() => {\r\n if (props.isUpdated) {\r\n setOpen(false);\r\n }\r\n }, [props.isUpdated])\r\n\r\n useEffect(() => {\r\n setCheckedValues(initState(props.stampDatas));\r\n }, [props.stampDatas])\r\n\r\n /**\r\n * チェックボックスの選択処理を行います。\r\n * @param checkedId\r\n */\r\n const handleSelect = (checkedId: WeekOfMonth) => {\r\n const newIds = checkedValues?.includes(checkedId)\r\n ? checkedValues?.filter(val => val !== checkedId)\r\n : [...(checkedValues ?? []), checkedId];\r\n\r\n setCheckedValues(newIds);\r\n }\r\n\r\n /** ダイアログを開きます。 */\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n /** ダイアログを閉じます。 */\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n /**\r\n * 更新処理を行います。\r\n */\r\n const onUpdateExecute = () => {\r\n props.onUpdateClick(ConstructionMacineMasterUtility.convertWeeklyListItem(props.stampDatas, checkedValues, props.inspector));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {/* 戻るボタン */}\r\n \r\n\r\n \r\n\r\n {/* 検印者 */}\r\n \r\n 検印者\r\n \r\n
\r\n \r\n \r\n {props.inspector}\r\n \r\n
\r\n\r\n {/* 検印選択 */}\r\n \r\n \r\n 検印選択\r\n \r\n \r\n {props.stampDatas.map((data, index) =>\r\n handleSelect(data.key)}\r\n />\r\n }\r\n />\r\n )}\r\n \r\n \r\n\r\n {/* 更新ボタン */}\r\n \r\n\r\n
\r\n\r\n\r\n {/* 確認ダイアログ */}\r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport default InspectionStampForm;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { WeeklyInspectionRecordSlice, onUpdateWeeklyInspectedStampAsync } from '../../../../../modules/slice/weekly-inspection-record/weekly-inspection-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { KeyValueItem, WeekOfMonth } from '../../../../../_types';\r\nimport { InspectedStampItem, UpdateInspectedStampListItem } from '../../../_types';\r\nimport InspectionStampForm from './InspectionStampForm';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\n\r\n/** 検印エリアを表示します。 */\r\nexport const StampContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const inspector = useSelector((state: RootState) => state.authentication?.user?.inspectorName ?? \"\");\r\n const inspectionStampItems: KeyValueItem[] = useSelector((state: RootState) => state.weeklyInspectionRecord?.report?.stampItems ?? []);\r\n const selectedItem = useSelector((state: RootState) => state.weeklyInspectionRecord?.selectedItem);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.weeklyInspectionRecord?.isUpdated ?? false);\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onUpdateClick = async (inputItems: UpdateInspectedStampListItem[]) => {\r\n if (!machine) {\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(\"施工機情報がありません。\"));\r\n } else if (!inspector) {\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(\"検印者情報がありません。\"));\r\n } else if (!selectedItem) {\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(\"選択項目の情報がありません。\"));\r\n } else if (!inspectionStampItems.length) {\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(\"帳票情報がありません。\"));\r\n } else {\r\n // 検印更新\r\n dispatch(onUpdateWeeklyInspectedStampAsync(\r\n {\r\n items: ConstructionMacineMasterUtility.toUpdateWeeklyInspectedStampItem(inputItems),\r\n },\r\n {\r\n machineId: machine.item.id,\r\n reportAt: selectedItem.completionDate\r\n }\r\n ))\r\n }\r\n };\r\n\r\n /** 戻るボタンのクリック処理を行います。 */\r\n const onBackClick = () => {\r\n // ビューワを閉じる\r\n dispatch(WeeklyInspectionRecordSlice.actions.toggleViewre(false));\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport ReportViewer from '../../../Shared/components/ReportViewer/ReportViewer';\r\nimport { WeeklyInspectionRecordSlice } from '../../../../../modules/slice/weekly-inspection-record/weekly-inspection-record-slice';\r\n\r\n\r\n/** 帳票ビューワを表示します。 */\r\nexport const ViewerContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const reportUrl: string = useSelector((state: RootState) => state.weeklyInspectionRecord?.report?.reportUrl ?? \"\");\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(WeeklyInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import { CompletionInspectionRecordListItem, CompletionInspectionRecordSearchType, StampSearchType } from '../../../pages/ConstructionMachineMaster/CompletionInspectionRecord/_types';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\nimport { CompletionInspectionRecordItem, CompletionInspectionRecordSearchType as DtoSearchType, MachineType as DtoMachineType } from '../../swagger-clients';\r\n\r\n/**\r\n * `完了時点検記録` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class CompletionInspectionRecordUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: CompletionInspectionRecordItem[]): CompletionInspectionRecordListItem[] {\r\n const result: CompletionInspectionRecordListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const dateAt = source.inspectionAt == null ? \"\" : SharedUtility.toDateString(new Date(source.inspectionAt));\r\n const item: CompletionInspectionRecordListItem = {\r\n no: source.reportNo ?? \"\",\r\n completionDate: dateAt,\r\n constructionMethod: source.method ?? \"\",\r\n worker: source.worker ?? \"\",\r\n site: source.site ?? \"\",\r\n report: source.report ?? \"\",\r\n area: SharedUtility.toAreaText(source.areaId),\r\n areaType: SharedUtility.toAreaType(source.areaId),\r\n isStamped: source.isInspected,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検索キーワード種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSearchType(source: CompletionInspectionRecordSearchType): DtoSearchType {\r\n const result: DtoSearchType | undefined =\r\n source === CompletionInspectionRecordSearchType.None ? DtoSearchType.None :\r\n source === CompletionInspectionRecordSearchType.Worker ? DtoSearchType.Worker :\r\n source === CompletionInspectionRecordSearchType.Place ? DtoSearchType.Site :\r\n source === CompletionInspectionRecordSearchType.Report ? DtoSearchType.Report :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toSearchType\");\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検印の検索種別を変換します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toisInspected(source: StampSearchType): boolean | undefined {\r\n const result: boolean | undefined =\r\n source === StampSearchType.Done ? true :\r\n source === StampSearchType.NotYet ? false :\r\n void 0;\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { CompletionInspectionRecordClient, GetCompletionInspectionRecordInput, GetDocumentInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { CompletionInspectionRecordGetRequest, CompletionInspectionRecordGetResult, CompletionInspectionRecordGetDocumentRequest, CompletionInspectionRecordGetDocumentResult } from './types';\r\nimport { CompletionInspectionRecordUtility } from './completion-inspection-record-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `完了時点検記録` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class CompletionInspectionRecordAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new CompletionInspectionRecordAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: CompletionInspectionRecordGetRequest): Promise {\r\n function createErrorResult(message?: string): CompletionInspectionRecordGetResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetCompletionInspectionRecordInput();\r\n input.init({\r\n machineId: parameter.item.machineId,\r\n machineType: SharedUtility.fromMachineType(parameter.item.machineType),\r\n searchType: CompletionInspectionRecordUtility.toSearchType(parameter.item.searchType),\r\n searchWord: parameter.item.keyword,\r\n searchBeginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n searchEndAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n isInspected: CompletionInspectionRecordUtility.toisInspected(parameter.item.searchStampType),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: CompletionInspectionRecordGetResult = {\r\n isError: false,\r\n items: CompletionInspectionRecordUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ドキュメントの取得を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getLinkAsync(parameter: CompletionInspectionRecordGetDocumentRequest): Promise {\r\n function createErrorResult(message?: string): CompletionInspectionRecordGetDocumentResult {\r\n return {\r\n url: \"\",\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetDocumentInput();\r\n input.init({\r\n no: parameter.no,\r\n });\r\n // memo kura: 実装 -> 関数不使用\r\n //const output = await this.client.getDocument(name);\r\n //if (output == null) {\r\n // return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n //}\r\n //else if (output.isError === true) {\r\n // return createErrorResult(output.errorMessage);\r\n //}\r\n\r\n // 正常\r\n const result: CompletionInspectionRecordGetDocumentResult = {\r\n isError: false,\r\n url: \"\", // output.url ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new CompletionInspectionRecordClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { RecordsSliceState, createReportListSlice } from '../shared/create-records-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\n// type\r\nimport { CompletionInspectionRecordAdapter } from '../../adapter/completion-inspection-record/completion-inspection-record-adapter';\r\nimport { CompletionInspectionRecordGetRequest, CompletionInspectionRecordGetResult, CompletionInspectionRecordGetDocumentRequest, CompletionInspectionRecordGetDocumentResult } from '../../adapter/completion-inspection-record/types';\r\nimport { CompletionInspectionRecordListItem, CompletionInspectionReportItem } from '../../../pages/ConstructionMachineMaster/CompletionInspectionRecord/_types';\r\nimport { CompletionReportRequest, UpdateCompletionReportRequest } from '../../adapter/report/type';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\n\r\n\r\n// State の初期値を設定します。\r\nconst initialState: RecordsSliceState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n isOpenViewer: false,\r\n isUpdated: false,\r\n isReportLoading: false,\r\n}\r\n\r\n/** 現場完了時点検記録 Slice を 提供します。*/\r\nexport const CompletionInspectionRecordSlice = createReportListSlice({\r\n // State Reducer Action を生成\r\n name: 'CompletionInspectionRecord',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter 要求情報を指定します。\r\n */\r\nexport const onGetAsync = (parameter: CompletionInspectionRecordGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = CompletionInspectionRecordAdapter.instance.getAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.item.machineId });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, machineErrorResultWaiter]);\r\n const getResult = promiseResult[0];\r\n const machineErrorResult = promiseResult[1];\r\n\r\n // 通信終了\r\n if (getResult.isError) {\r\n // 異常\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchFailure());\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(machineErrorResult.errorMessage ?? \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 正常\r\n dispatch(CompletionInspectionRecordSlice.actions.setItems(getResult.items));\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 帳票取得処理を行います。\r\n * @param parameter パラメーターを指定します。\r\n */\r\nexport const onGetCompletionReportAsync = (parameter: CompletionReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchStart());\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.getCompletionReport(parameter);\r\n\r\n // 通信終了\r\n if (result.isError || result.stampItem == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(CompletionInspectionRecordSlice.actions.setReport(\r\n {\r\n reportUrl: result.reportUrl,\r\n stampItem: result.stampItem,\r\n }\r\n ));\r\n dispatch(CompletionInspectionRecordSlice.actions.toggleViewre(true));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 検印更新処理を行います。\r\n * @param updateParam 更新パラメーターを指定します。\r\n * @param getParam 取得パラメーターを指定します。\r\n */\r\nexport const onUpdateCompletionInspectedStampAsync = (updateParam: UpdateCompletionReportRequest, getParam: CompletionReportRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchStart());\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(true));\r\n\r\n // 更新フラグ OFF\r\n dispatch(CompletionInspectionRecordSlice.actions.changeUpdatedFlag(false));\r\n\r\n // URL クリア\r\n dispatch(CompletionInspectionRecordSlice.actions.clearReport());\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.updateCompletionInspectedStamp(updateParam);\r\n\r\n // 通信終了\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 通信処理\r\n const getResult = await ReportAdapter.instance.getCompletionReport(getParam);\r\n\r\n // 通信終了\r\n if (getResult.isError || getResult.stampItem == null) {\r\n // 異常\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(getResult.errorMessage ?? \"\"));\r\n\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showSuccessMessage());\r\n\r\n // 正常\r\n dispatch(CompletionInspectionRecordSlice.actions.setReport(\r\n {\r\n reportUrl: getResult.reportUrl,\r\n stampItem: getResult.stampItem,\r\n }\r\n ));\r\n dispatch(CompletionInspectionRecordSlice.actions.changeUpdatedFlag(true));\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchFailure());\r\n\r\n // メッセージ\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(`${error}`));\r\n\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(CompletionInspectionRecordSlice.actions.fetchEnd());\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport MaterialTable, { MTableBodyRow, Column } from 'material-table';\r\nimport Box from '@material-ui/core/Box';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// type\r\nimport { CompletionInspectionRecordListItem } from \"../../_types\";\r\n// 共通component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\nimport { ConstructionMchineMasterOptions } from '../../../Shared/ConstructionMchineMasterTableOptions';\r\nimport { useStyles } from '../../../Shared/ConstructionMchineMasterTableStyles';\r\nimport { ReportIconButton } from '../../../Shared/components/ReportIconButton/ReportIconButton';\r\n\r\n/** 現場完了時点検記録テーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: CompletionInspectionRecordListItem[],\r\n /** 帳票出力イベントを表します。 */\r\n onDocumentClickAysnc: (rowData: CompletionInspectionRecordListItem) => void,\r\n}\r\n\r\n/** 現場完了時点検記録テーブルの State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/** 現場完了時点検記録テーブルを提供します */\r\nconst CompletionInspectionRecordTable: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 現場完了時点検記録テーブルのカラムを表します。 */\r\n const columnData: Column[] = [\r\n {\r\n title: \"帳票\",\r\n field: \"isStamped\",\r\n width: 50,\r\n cellStyle: { padding: \"0px 5px\" },\r\n render: (rowData: CompletionInspectionRecordListItem) => (\r\n \r\n rowData={rowData}\r\n onClick={props.onDocumentClickAysnc}\r\n />\r\n ),\r\n },\r\n {\r\n title: \"点検記録表 No.\",\r\n field: \"no\",\r\n },\r\n {\r\n title: \"点検完了日時\",\r\n field: \"completionDate\",\r\n\r\n },\r\n {\r\n title: \"工法\",\r\n field: \"constructionMethod\",\r\n },\r\n {\r\n title: \"所属\",\r\n field: \"area\",\r\n },\r\n {\r\n title: \"作業場所\",\r\n field: \"site\",\r\n },\r\n {\r\n title: \"作業者\",\r\n field: \"worker\",\r\n },\r\n {\r\n title: \"報告事項\",\r\n field: \"report\",\r\n cellStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n headerStyle: {\r\n width: 200,\r\n maxWidth: 200,\r\n },\r\n render: (rowData: CompletionInspectionRecordListItem) => (\r\n \r\n <>{rowData.report}\r\n \r\n ),\r\n },\r\n\r\n ];\r\n\r\n /** カラム情報を提供します。 */\r\n const [values, setValues] = useState({\r\n columns: columnData,\r\n });\r\n\r\n /**\r\n * ソート変更時のイベント処理を行います。\r\n * @param orderBy\r\n * @param orderDirection\r\n */\r\n const onOrderChange = (orderBy: number, orderDirection: \"asc\" | \"desc\"): void => {\r\n\r\n // 再レンダーされる時にソート順がリセットされないようにState で保持する\r\n setValues({\r\n columns: values.columns.map((column, index) => {\r\n if (index === orderBy) {\r\n column.defaultSort = orderDirection;\r\n } else {\r\n delete column.defaultSort\r\n }\r\n return column;\r\n })\r\n })\r\n };\r\n\r\n return (\r\n \r\n {\r\n return (\r\n props.onDocumentClickAysnc(rowProps.data)}\r\n {...rowProps}\r\n />\r\n )\r\n }\r\n }}\r\n onOrderChange={onOrderChange}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default CompletionInspectionRecordTable;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { onGetCompletionReportAsync, CompletionInspectionRecordSlice } from '../../../../../modules/slice/completion-inspection-record/completion-inspection-record-slice';\r\n// type\r\nimport { CompletionInspectionRecordListItem } from \"../../_types\";\r\nimport { AreaType } from '../../../../../_types';\r\n// component\r\nimport CompletionInspectionRecordTable from './CompletionInspectionRecordTable';\r\n\r\n/** 現場完了時点検記録テーブルを提供します */\r\nexport const CompletionInspectionRecordTableContainer: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machineId = useSelector((state: RootState) => state.globalHeader.machine?.item.id ?? \"\");\r\n const data: CompletionInspectionRecordListItem[] = useSelector((state: RootState) => state.completionInspectionRecord.resultItems ?? []);\r\n const areaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * 帳票ボタンクリック時のイベント処理を行います。\r\n * @param rowData\r\n */\r\n const onDocumentClickAsync = async (rowData: CompletionInspectionRecordListItem) => {\r\n\r\n if (!machineId) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"施工機情報がありません\"));\r\n }\r\n else {\r\n // 選択項目保存\r\n dispatch(CompletionInspectionRecordSlice.actions.selectItem(rowData));\r\n // 通信\r\n await dispatch(onGetCompletionReportAsync({\r\n machineId,\r\n reportAt: rowData.completionDate\r\n }));\r\n }\r\n\r\n }\r\n\r\n /**\r\n * エリア種別のフィルター処理を行います。\r\n * @param source テーブルデータを指定します。\r\n * @param areaType エリア種別を指定します。\r\n * @returns フィルタ後のテーブルデータを返します。\r\n */\r\n const areaTypeFilter = (source: CompletionInspectionRecordListItem[], areaType: AreaType) => {\r\n\r\n // エリアが確定していない施工機は全国でしか表示しない。\r\n // material-tableにデータをそのまま渡すとErrorになるので複製・参照を切る\r\n return source.filter(item => (areaType === AreaType.None ? true : item.areaType === areaType)).map(item => ({ ...item }));\r\n\r\n }\r\n\r\n return (\r\n \r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n TextField,\r\n FormControlLabel,\r\n Box,\r\n RadioGroup,\r\n Radio,\r\n FormControl,\r\n} from '@material-ui/core';\r\n// component\r\nimport { CompletionInspectionRecordSearchType, StampSearchType } from '../../_types';\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタン\r\n radioGroup: {\r\n display: \"inline-flex\",\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // グループ化 枠\r\n groupContainer: {\r\n position: \"relative\",\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderStyle: \"solid\",\r\n borderRadius: 4,\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n\r\n },\r\n // グループ化 タイトル\r\n groupTitle: {\r\n position: \"absolute\",\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n top: \"-12px\",\r\n left: \"-8px\",\r\n fontWeight: \"bold\",\r\n backgroundColor: theme.palette.background.paper,\r\n }\r\n }),\r\n);\r\n\r\n/** 現場完了時点検記録画面 検索エリアの State を表示します。 */\r\nexport interface CompletionInspectionRecordSearchState {\r\n /**キーワードを表します。 */\r\n keyword: string,\r\n /** 検索条件を表します。 */\r\n searchType: CompletionInspectionRecordSearchType,\r\n /** 検索条件を表します。 */\r\n searchStampType: StampSearchType,\r\n /** 開始日を表します。 */\r\n beginAt: Date | null,\r\n /** 終了日を表します。 */\r\n endAt: Date | null,\r\n}\r\n\r\n/** 現場完了時点検記録画面 検索エリアのPropsを表示します。 */\r\ninterface Props {\r\n /** 入力初期値を表します。 */\r\n initInputItem: CompletionInspectionRecordSearchState,\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (inputItem: CompletionInspectionRecordSearchState) => void\r\n}\r\n\r\n/** 現場完了時点検記録画面 検索エリアを表示します。 */\r\nconst CompletionInspectionSearch: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: CompletionInspectionRecordSearchType.Place, label: \"作業場所\" },\r\n { key: CompletionInspectionRecordSearchType.Worker, label: \"作業者\" },\r\n { key: CompletionInspectionRecordSearchType.Report, label: \"報告事項\" },\r\n ];\r\n const stampSearchTypeRadioButton = [\r\n { key: StampSearchType.None, label: \"未指定\" },\r\n { key: StampSearchType.Done, label: \"検印済み\" },\r\n { key: StampSearchType.NotYet, label: \"検印なし\" },\r\n ];\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力項目を提供します。*/\r\n const [values, setValues] = useState(props.initInputItem);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof CompletionInspectionRecordSearchState) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n return (\r\n \r\n\r\n
\r\n \r\n 検索範囲\r\n \r\n\r\n \r\n\r\n \r\n\r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n
\r\n\r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(data)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(data)}\r\n />\r\n\r\n \r\n 検印\r\n \r\n\r\n \r\n\r\n {stampSearchTypeRadioButton.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(values)}\r\n />\r\n\r\n
\r\n );\r\n\r\n\r\n};\r\n\r\nexport default CompletionInspectionSearch;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/completion-inspection-record/completion-inspection-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n// component\r\nimport CompletionInspectionSearch, { CompletionInspectionRecordSearchState } from './CompletionInspectionSearch';\r\nimport { CompletionInspectionRecordSearchType, StampSearchType } from '../../_types';\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n * */\r\nconst initState = (): CompletionInspectionRecordSearchState => {\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n const result: CompletionInspectionRecordSearchState = {\r\n keyword: \"\",\r\n searchType: CompletionInspectionRecordSearchType.Report,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** 現場完了時点検記録画面 検索エリアを表示します。 */\r\nexport const CompletionInspectionSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.completionInspectionRecord?.isUpdated ?? false);\r\n const isOpenViewer = useSelector((state: RootState) => state.completionInspectionRecord.isOpenViewer ?? true);\r\n\r\n const [value, setValue] = useState(initState);\r\n\r\n useEffect(() => {\r\n\r\n if (isUpdated && !isOpenViewer && machine) {\r\n onSearchClickAsync(value);\r\n }\r\n\r\n }, [machine, isUpdated, isOpenViewer, value, dispatch]);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (inputItem: CompletionInspectionRecordSearchState) => {\r\n setValue(inputItem);\r\n\r\n if (machine) {\r\n\r\n // 実行\r\n await dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: inputItem.keyword,\r\n searchType: inputItem.searchType,\r\n searchStampType: inputItem.searchStampType,\r\n beginAt: inputItem.beginAt,\r\n endAt: inputItem.endAt,\r\n }\r\n }));\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { FormControl, TextField, MenuItem, Divider, FormGroup, FormControlLabel, FormLabel, Checkbox, FormHelperText, Box } from '@material-ui/core';\r\nimport { KeyValueItem } from '../../../../../_types';\r\nimport { InspectedStampItem, UpdateInspectedStampListItem } from '../../../_types';\r\nimport MuiBackToListButton from '../../../../../components/Buttons/MuiBackToListButton';\r\nimport MuiUpdateButton from '../../../../../components/Buttons/MuiUpdateButton';\r\nimport InspectionConfirmDialog from '../../../Shared/components/ComfirmDialog/InspectionStampConfirmDialog';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\nimport AccountBoxIcon from '@material-ui/icons/AccountBox';\r\n\r\n/** 現場完了時点検の検印エリアの Props を表示します。 */\r\ninterface Props {\r\n /** 検印者名を表します。 */\r\n inspector: string;\r\n /** 検印された日付を表します。 */\r\n stampData?: InspectedStampItem,\r\n /** 更新ボタンのクリック処理を表します。 */\r\n onUpdateClick: (inputItems: UpdateInspectedStampListItem[]) => void,\r\n /** 戻るボタンのクリック処理を表します。 */\r\n onBackClick: () => void,\r\n /** 帳票が更新されたかどうかを表します。 */\r\n isUpdated: boolean,\r\n}\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // 区切り線\r\n divider: {\r\n marginBottom: theme.spacing(4),\r\n },\r\n // 検印者\r\n inspector: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '1.25rem',\r\n },\r\n // 検印者名\r\n name: {\r\n margin: 'auto',\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * State の初期化を行います。\r\n * @param source 検印情報を指定します。\r\n * @returns 配列を返します。\r\n */\r\nconst initState = (source?: InspectedStampItem): boolean => {\r\n return source != null && source.exist && source.isStamped != null\r\n ? source.isStamped\r\n : false;\r\n}\r\n\r\n/** 検印選択エリアを表示します。*/\r\nconst InspectionStampForm: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** ダイアログの開閉状態を表します。 */\r\n const [open, setOpen] = React.useState(false);\r\n\r\n /** 検印選択情報を表します。 */\r\n const [checked, setChecked] = React.useState(initState(props.stampData));\r\n\r\n useEffect(() => {\r\n if (props.isUpdated) {\r\n setOpen(false);\r\n }\r\n }, [props.isUpdated])\r\n\r\n useEffect(() => {\r\n setChecked(initState(props.stampData));\r\n }, [props.stampData])\r\n\r\n /**\r\n * チェックボックスの選択処理を行います。\r\n * @param event イベントを指定します。\r\n */\r\n const handleSelect = (event: React.ChangeEvent) => {\r\n setChecked(event.target.checked);\r\n }\r\n\r\n /** ダイアログを開きます。 */\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n /** ダイアログを閉じます。 */\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n /**\r\n * 更新処理を行います。\r\n */\r\n const onUpdateExecute = () => {\r\n\r\n props.onUpdateClick(ConstructionMacineMasterUtility.convertCompletionInspectionListItem(checked, props.inspector, props.stampData));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {/* 戻るボタン */}\r\n \r\n\r\n \r\n\r\n {/* 検印者 */}\r\n \r\n 検印者\r\n \r\n
\r\n \r\n \r\n {props.inspector}\r\n \r\n
\r\n\r\n {/* 検印選択 */}\r\n \r\n \r\n 検印選択\r\n \r\n\r\n {props.stampData\r\n ? \r\n \r\n }\r\n />\r\n \r\n : <>検印情報がありません\r\n }\r\n \r\n\r\n {/* 更新ボタン */}\r\n \r\n\r\n
\r\n\r\n\r\n {/* 確認ダイアログ */}\r\n {(props.stampData && open) &&\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\nexport default InspectionStampForm;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { CompletionInspectionRecordSlice, onUpdateCompletionInspectedStampAsync } from '../../../../../modules/slice/completion-inspection-record/completion-inspection-record-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport InspectionStampForm from './InspectionStampForm';\r\nimport { ConstructionMacineMasterUtility } from '../../../Shared/ConstructionMacineMasterUtility';\r\nimport { UpdateInspectedStampListItem } from '../../../_types';\r\n\r\n/** 検印エリアを表示します。 */\r\nexport const StampContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const inspector = useSelector((state: RootState) => state.authentication?.user?.inspectorName ?? \"\");\r\n const inspectionStampItem = useSelector((state: RootState) => state.completionInspectionRecord?.report?.stampItem);\r\n const selectedItem = useSelector((state: RootState) => state.completionInspectionRecord?.selectedItem);\r\n const isUpdated: boolean = useSelector((state: RootState) => state.completionInspectionRecord?.isUpdated ?? false);\r\n\r\n /** 検印ボタンのクリック処理を行います。 */\r\n const onUpdateClick = async (inputItems: UpdateInspectedStampListItem[]) => {\r\n\r\n // 更新用パラメータ成型\r\n const updateItem = ConstructionMacineMasterUtility.toUpdateCompletionInspectedStampItem(inputItems);\r\n if (!machine) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"施工機情報がありません。\"));\r\n } else if (!inspector) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"検印者情報がありません。\"));\r\n } else if (!selectedItem) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"選択項目の情報がありません。\"));\r\n } else if (!inspectionStampItem) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"帳票情報がありません。\"));\r\n } else if (!updateItem) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"検印更新情報がありません。\"));\r\n } else {\r\n // 検印更新\r\n dispatch(onUpdateCompletionInspectedStampAsync(\r\n {\r\n item: updateItem,\r\n },\r\n {\r\n machineId\r\n : machine.item.id,\r\n reportAt: selectedItem.completionDate\r\n }\r\n ))\r\n }\r\n };\r\n\r\n /** 戻るボタンのクリック処理を行います。 */\r\n const onBackClick = () => {\r\n // ビューワを閉じる\r\n dispatch(CompletionInspectionRecordSlice.actions.toggleViewre(false));\r\n };\r\n\r\n return (\r\n <>\r\n {inspectionStampItem &&\r\n \r\n\r\n }\r\n \r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport ReportViewer from '../../../Shared/components/ReportViewer/ReportViewer';\r\nimport { CompletionInspectionRecordSlice } from '../../../../../modules/slice/completion-inspection-record/completion-inspection-record-slice';\r\n\r\n/** 帳票ビューワを表示します。 */\r\nexport const ViewerContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const reportUrl: string = useSelector((state: RootState) => state.completionInspectionRecord?.report?.reportUrl ?? \"\");\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(CompletionInspectionRecordSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n// shared\r\nimport { ExtendGenericState, createExtendGenericSlice } from '../shared/create-extend-generic-slice';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { changeError } from '../global-header/global-header-slice';\r\n// type\r\nimport { EditItem } from '../../../pages/ConstructionMachineMaster/StatusEdit/_types';\r\nimport { MachineMaintenanceSettingResult, MachineStatusMonitoringRequest, MachineMaintenanceSettingRequest, MachineMaintenanceSettingRestHistoryRequest, MachineMaintenanceSettingResetHistoryResult } from '../../adapter/machine-status-monitoring/types';\r\nimport { MachineStatusMonitoringAdapter } from '../../adapter/machine-status-monitoring/machine-status-monitoring-adapter';\r\n\r\n/** ステータス編集 結果情報の State を表します。 */\r\ninterface StatusEditResultState {\r\n /** ステータス取得結果情報を表します。 */\r\n getStatusResult: MachineMaintenanceSettingResult,\r\n /** 制御要求一覧取得結果情報を表します。 */\r\n getClientRequestResult: MachineMaintenanceSettingResult,\r\n /** 選択されたリセット項目のリセット履歴情報を表します。 */\r\n getResetHistoryResult: MachineMaintenanceSettingResetHistoryResult,\r\n}\r\n\r\n/**ステータス編集 アイテム情報の State を表します。 */\r\ninterface StatusEditItemState {\r\n /** 編集ダイアログが開いているかどうか表します。 */\r\n isOpenEdit: boolean;\r\n /** 履歴ダイアログが開いているかどうか表します。 */\r\n isOpenHsitory: boolean;\r\n /** 編集する項目を表します。 */\r\n editItem?: EditItem,\r\n /** タイマーIDを表します。 */\r\n timerId: number;\r\n}\r\n\r\n/** リロードのインターバル時間[ms]を表します。 */\r\nconst ReloadTimerInterval = 60000;\r\n\r\n// State の初期値を設定します。\r\nconst initialState: ExtendGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n getStatusResult: {\r\n isError: false,\r\n },\r\n getClientRequestResult: {\r\n isError: false,\r\n },\r\n getResetHistoryResult: {\r\n isError: false,\r\n },\r\n },\r\n item: {\r\n isOpenEdit: false,\r\n isOpenHsitory: false,\r\n timerId: 0,\r\n }\r\n}\r\n\r\n/** ステータス編集 Slice を 提供します。*/\r\nexport const StatusEditSlice = createExtendGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'StatusEditSlice',\r\n initialState: initialState,\r\n reducers: {\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchEndStatusResult(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result.getStatusResult = action.payload;\r\n },\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchEndClientRequestResult(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result.getClientRequestResult = action.payload;\r\n },\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchEndResetHistoryResult(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result.getResetHistoryResult = action.payload;\r\n },\r\n\r\n /**\r\n * 編集ダイアログを開きます。\r\n * @param state\r\n * @param action\r\n */\r\n openEditDialog(state: ExtendGenericState) {\r\n state.item.isOpenEdit = true;\r\n },\r\n\r\n /**\r\n * 履歴ダイアログを開きます。\r\n * @param state\r\n * @param action\r\n */\r\n openHistoryDialog(state: ExtendGenericState) {\r\n state.item.isOpenHsitory = true;\r\n },\r\n\r\n /**\r\n * ダイアログを閉じます。\r\n * @param state\r\n * @param action\r\n */\r\n closeDialog(state: ExtendGenericState) {\r\n state.item.isOpenEdit = false;\r\n state.item.isOpenHsitory = false;\r\n },\r\n\r\n /**\r\n * 編集ボタンクリック処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n changeEditItem(state: ExtendGenericState, action: PayloadAction) {\r\n state.item.editItem = action.payload;\r\n },\r\n\r\n /**\r\n * 更新タイマーを停止します。\r\n * @param state\r\n */\r\n stopReloadTimer(state: ExtendGenericState) {\r\n clearTimeout(state.item.timerId);\r\n state.item.timerId = 0;\r\n },\r\n /**\r\n * 更新タイマーを開始します。\r\n * @param state\r\n */\r\n startReloadTimer(state: ExtendGenericState, action: PayloadAction) {\r\n clearTimeout(state.item.timerId);\r\n state.item.timerId = action.payload;\r\n }\r\n },\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: MachineStatusMonitoringRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(StatusEditSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const getResultWaiter = MachineStatusMonitoringAdapter.instance.getMachineMaintenanceSettingItemAsync(parameter);\r\n const getClientRequestResultWaiter = MachineStatusMonitoringAdapter.instance.getClientRequestAsync(parameter);\r\n const machineErrorResultWaiter = SharedAdapter.instance.getErrorAsync({ machineId: parameter.id });\r\n\r\n // まとめて取得\r\n const promiseResult = await Promise.all([getResultWaiter, getClientRequestResultWaiter, machineErrorResultWaiter]);\r\n const statusResult = promiseResult[0];\r\n const clientRequestResult = promiseResult[1];\r\n const machineErrorResult = promiseResult[2];\r\n\r\n if (statusResult.isError) {\r\n // ステータス取得エラー\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(statusResult.errorMessage ? `ステータス取得エラー: ${statusResult.errorMessage}` : \"\"));\r\n\r\n } else if (clientRequestResult.isError) {\r\n // 制御要求取得エラー\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(clientRequestResult.errorMessage ? `制御要求リスト取得エラー: ${clientRequestResult.errorMessage}` : \"\"));\r\n\r\n } else if (machineErrorResult.isError) {\r\n // CTUエラー取得エラー\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(machineErrorResult.errorMessage ? `CTUエラー取得エラー: ${machineErrorResult.errorMessage}` : \"\"));\r\n\r\n } else {\r\n const isCtuEror = !machineErrorResult.item ? false : true; // 空文字 -> 正常(false)\r\n // ヘッダ エラー情報\r\n dispatch(changeError(isCtuEror))\r\n\r\n // 通信終了\r\n dispatch(StatusEditSlice.actions.fetchEndStatusResult(statusResult));\r\n dispatch(StatusEditSlice.actions.fetchEndClientRequestResult(clientRequestResult));\r\n\r\n // 正常\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(StatusEditSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * リセット履歴取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetRestHistoryAsync = (parameter: MachineMaintenanceSettingRestHistoryRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(StatusEditSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await MachineStatusMonitoringAdapter.instance.getResetHistoryAsync(parameter);\r\n\r\n if (result.isError) {\r\n // 取得エラー\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(result.errorMessage ? `リセット履歴取得エラー: ${result.errorMessage}` : \"\"));\r\n\r\n } else {\r\n\r\n // 通信終了\r\n dispatch(StatusEditSlice.actions.fetchEndResetHistoryResult(result));\r\n\r\n // 正常\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showSuccessMessage());\r\n\r\n }\r\n\r\n } catch (error) {\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(StatusEditSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 更新情報送信処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onUpdateAsync = (parameter: MachineMaintenanceSettingRequest, password: string) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(StatusEditSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 要求情報送信実行\r\n const result = await MachineStatusMonitoringAdapter.instance.addOrUpdateClientRequestAsync(parameter);\r\n\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showSuccessMessage());\r\n\r\n // 取得処理\r\n await dispatch(onGetAsync(parameter));\r\n\r\n // ダイアログを閉じる\r\n dispatch(onCloseDialog({ id: parameter.id }));\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(StatusEditSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 更新ボタンクリック処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onUpdateClickAsync = (parameter: MachineMaintenanceSettingRequest, password: string) => async (dispatch: Dispatch) => {\r\n\r\n // 制御要求処理\r\n await dispatch(onUpdateAsync(parameter, password));\r\n\r\n}\r\n\r\n\r\n/** ダイアログクローズ処理を行います。 */\r\nexport const onCloseDialog = (parameter: MachineMaintenanceSettingRequest) => (dispatch: Dispatch) => {\r\n\r\n // ダイアログを閉じる\r\n dispatch(StatusEditSlice.actions.closeDialog());\r\n\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n}\r\n\r\n\r\n/** 編集ダイアログのオープン処理を行います。 */\r\nexport const onOpenEditDialog = (item: EditItem) => (dispatch: Dispatch) => {\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n // 選択項目取得\r\n dispatch(StatusEditSlice.actions.changeEditItem(item));\r\n // ダイアログを開く\r\n dispatch(StatusEditSlice.actions.openEditDialog());\r\n}\r\n\r\n\r\n/** 履歴ダイアログのオープン処理を行います。 */\r\nexport const onOpenHistoryDialog = (item: EditItem) => (dispatch: Dispatch) => {\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n // 選択項目取得\r\n dispatch(StatusEditSlice.actions.changeEditItem(item));\r\n // ダイアログを開く\r\n dispatch(StatusEditSlice.actions.openHistoryDialog());\r\n}\r\n\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetReloadAsync = (parameter: MachineStatusMonitoringRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // タイマー停止\r\n dispatch(stopReloadTimer());\r\n // 実行\r\n await dispatch(onGetAsync(parameter));\r\n\r\n } catch (e) {\r\n //何もしない\r\n\r\n } finally {\r\n // タイマー開始\r\n dispatch(startReloadTimer(parameter));\r\n }\r\n\r\n}\r\n\r\n/** リロードタイマーを停止します。 */\r\nconst stopReloadTimer = () => (dispatch: Dispatch) => {\r\n\r\n // タイマー停止\r\n dispatch(StatusEditSlice.actions.stopReloadTimer());\r\n}\r\n\r\n\r\n/** リロードタイマーを開始します。 */\r\nconst startReloadTimer = (parameter: MachineStatusMonitoringRequest) => (dispatch: Dispatch) => {\r\n\r\n // タイマー開始\r\n const timer = window.setTimeout(() => dispatch(onGetReloadAsync(parameter)), ReloadTimerInterval)\r\n dispatch(StatusEditSlice.actions.startReloadTimer(timer));\r\n}\r\n","import * as React from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { EditItem } from '../../_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // カードコンテンツ\r\n cardContent: {\r\n paddingTop: 0,\r\n },\r\n // 取得値コンテナ\r\n textContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"flex-end\",\r\n },\r\n // 値\r\n value: {\r\n fontSize: \"3rem\",\r\n fontWeight: \"bold\",\r\n textAlign: \"end\",\r\n color: theme.palette.success.main,\r\n },\r\n // 単位\r\n unit: {\r\n fontSize: \"1.2rem\",\r\n textAlign: \"start\",\r\n marginLeft: \"0.5rem\",\r\n },\r\n }),\r\n);\r\n\r\n/** ステータス編集カードコンテンツの Props のインターフェイスを提供します。 */\r\ninterface Props {\r\n /** 編集項目を表します。 */\r\n item: EditItem,\r\n};\r\n\r\n/**\r\n * ステータス編集カードの コンテンツを表示します。\r\n * @param props\r\n */\r\nconst EditCardContent: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n \r\n {/* 値 */}\r\n \r\n {!props.item.value ? '\\u00A0' : props.item.value}\r\n \r\n {/* 単位 */}\r\n \r\n {props.item.unit}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditCardContent;\r\n","import * as React from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport HistoryIcon from '@material-ui/icons/History';\r\nimport { EditItem } from '../../_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // カードヘッダー\r\n cardHeader: {\r\n paddingBottom: 0,\r\n },\r\n // タイトル\r\n header: {\r\n display: \"flex\",\r\n flexFlow: \"wrap\",\r\n\r\n },\r\n // タイトル\r\n title: {\r\n fontSize: \"1.25rem\",\r\n\r\n },\r\n // 書き込み値\r\n reset: {\r\n color: theme.palette.error.main,\r\n fontSize: \"1.25rem\",\r\n marginLeft: \"auto\",\r\n },\r\n // アイコン\r\n iconRed: {\r\n color: theme.palette.error.main,\r\n }\r\n }),\r\n);\r\n\r\n/** ステータス編集カードヘッダーの Props のインターフェイスを提供します。 */\r\ninterface Props {\r\n /** 編集項目を表します。 */\r\n item: EditItem,\r\n /** 編集ボタンクリック時のイベントを表します。 */\r\n onEditClick: (item: EditItem) => void,\r\n /** 履歴ボタンクリック時のイベントを表します。 */\r\n onHistoryClick: (item: EditItem) => void,\r\n};\r\n\r\n/**\r\n * ステータス編集カードを提供します。\r\n * @param props\r\n */\r\nconst EditCardHeader: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n \r\n {props.item.name}\r\n \r\n {props.item.updateValue &&\r\n \r\n {`[${props.item.updateValue}]`}\r\n \r\n }\r\n \r\n }\r\n action={\r\n <>\r\n {/* 履歴 */}\r\n props.onHistoryClick(props.item)}\r\n >\r\n \r\n \r\n\r\n {/* 編集 */}\r\n props.onEditClick(props.item)}\r\n >\r\n \r\n \r\n \r\n }\r\n />\r\n );\r\n};\r\n\r\nexport default EditCardHeader;\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport { EditItem } from '../../_types';\r\nimport EditCardContent from './EditCardContent';\r\nimport EditCardHeader from '../EditCardHeader/EditCardHeader';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"block\",\r\n minHeight: \"136px\",\r\n },\r\n }),\r\n);\r\n\r\n/** ステータス編集カードの Props を提供します。 */\r\ninterface Props {\r\n /** 編集項目を表します。 */\r\n item: EditItem,\r\n /** 編集ボタンクリック時のイベントを表します。 */\r\n onEditClick: (item: EditItem) => void,\r\n /** 履歴ボタンクリック時のイベントを表します。 */\r\n onHistoryClick: (item: EditItem) => void,\r\n};\r\n\r\n/**\r\n * ステータス編集カードを提供します。\r\n * @param props\r\n */\r\nconst EditCard: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport default EditCard;\r\n","import * as React from 'react';\r\nimport clsx from 'clsx';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport { EditItem } from '../../_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // カードコンテンツ\r\n cardContent: {\r\n paddingTop: 0,\r\n },\r\n // 取得値コンテナ\r\n textContainer: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\",\r\n justifyContent: \"flex-end\",\r\n },\r\n // 値\r\n value: {\r\n fontSize: \"3rem\",\r\n fontWeight: \"bold\",\r\n textAlign: \"end\",\r\n },\r\n // 値正常\r\n valueNormally: {\r\n color: theme.palette.success.main,\r\n },\r\n // 値超過\r\n valueExcess: {\r\n color: theme.palette.error.main,\r\n },\r\n // 単位\r\n unit: {\r\n fontSize: \"1.2rem\",\r\n textAlign: \"start\",\r\n marginLeft: \"0.5rem\",\r\n },\r\n // 接頭辞\r\n prefix: {\r\n fontSize: \"1.2rem\",\r\n textAlign: \"end\",\r\n marginRight: \"0.5rem\",\r\n },\r\n }),\r\n);\r\n\r\n/** ステータス編集カードコンテンツの Props のインターフェイスを提供します。 */\r\ninterface Props {\r\n /** 編集項目を表します。 */\r\n item: EditItem,\r\n};\r\n\r\n/**\r\n * ステータス編集カードの コンテンツを表示します。\r\n * @param props\r\n */\r\nconst EditCardRemainsContent: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n /**\r\n * 数値に変換します。\r\n * @param value 変換元を指定します。\r\n * @returns 数値を返します。変換できない場合は null を返します。\r\n */\r\n const convertToNumber = (value: string): number | null => {\r\n return Number.isFinite(parseInt(value)) ? parseInt(value) : null;\r\n }\r\n\r\n /**\r\n * ステータス項目の値を表示します。\r\n * @param value 値を指定します。\r\n */\r\n const renderValue = (source: string) => {\r\n\r\n //数値チェック\r\n let value = convertToNumber(source);\r\n\r\n // レンダー\r\n if (value && value < 0) {\r\n // 超過表示\r\n return renderExcessValue(`${Math.abs(value)}`);\r\n } else {\r\n // 正常表示\r\n return renderNomallyValue(source);\r\n }\r\n }\r\n\r\n /**\r\n * 超過値を表示します。\r\n * @param value 値を指定します。\r\n */\r\n const renderExcessValue = (value: string) => {\r\n return (\r\n \r\n {/* Prefix */}\r\n 超過\r\n\r\n {/* Value */}\r\n {!value ? '\\u00A0' : value}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * 正常値を表示します。\r\n * @param value 値を指定します。\r\n */\r\n const renderNomallyValue = (value: string) => {\r\n return (\r\n \r\n {/* Prefix */}\r\n あと\r\n\r\n {/* Value */}\r\n {!value ? '\\u00A0' : value}\r\n \r\n );\r\n\r\n }\r\n\r\n return (\r\n \r\n \r\n {/* 値 */}\r\n \r\n {renderValue(props.item.value)}\r\n \r\n {/* 単位 */}\r\n \r\n {props.item.unit}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EditCardRemainsContent;\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport { EditItem } from '../../_types';\r\nimport EditCardRemainsContent from './EditCardRemainsContent';\r\nimport EditCardHeader from '../EditCardHeader/EditCardHeader';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"block\",\r\n minHeight: \"136px\",\r\n },\r\n }),\r\n);\r\n\r\n/** ステータス編集カードの Props のインターフェイスを提供します。 */\r\ninterface Props {\r\n /** 編集項目を表します。 */\r\n item: EditItem,\r\n /** 編集ボタンクリック時のイベントを表します。 */\r\n onEditClick: (item: EditItem) => void,\r\n /** 履歴ボタンクリック時のイベントを表します。 */\r\n onHistoryClick: (item: EditItem) => void,\r\n};\r\n\r\n/**\r\n * ステータス編集カードを表示します。\r\n * @param props\r\n */\r\nconst EditCardRemains: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport default EditCardRemains;\r\n","//react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n Box,\r\n Grid,\r\n} from '@material-ui/core';\r\n// type\r\nimport { MachineMaintenanceSettingItem, EditItem } from '../../_types';\r\n// component\r\nimport UpdateItem from '../../../Shared/UpdateItem';\r\nimport EditCard from '../EditCard/EditCard';\r\nimport EditCardRemains from '../EditCardRemains/EditCardRemains';\r\nimport { MachineDataType } from '../../../MachineStatus/_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボックス\r\n box: {\r\n padding: theme.spacing(1),\r\n },\r\n // グリッドコンテナ\r\n gridContainer: {\r\n alignItems: \"center\",\r\n padding: theme.spacing(0, 1, 0, 1)\r\n },\r\n }),\r\n);\r\n\r\n\r\n/**\r\n * ステータス編集画面の Props を提供します。\r\n */\r\ninterface Props {\r\n /** データを表します。 */\r\n statusData?: MachineMaintenanceSettingItem,\r\n /** データを表します。 */\r\n updateData?: MachineMaintenanceSettingItem,\r\n /** 最終更新日時を表します。*/\r\n lastUpdatedAt: string,\r\n /** 更新ボタンクリック時のイベント処理を表します。*/\r\n onUpdateClick: () => void,\r\n /** 編集ボタンクリック時のイベント処理を表します。*/\r\n onEditClick: (item: EditItem) => void,\r\n /** 履歴ボタンクリック時のイベントを表します。 */\r\n onHisrotyClick: (item: EditItem) => void,\r\n}\r\n\r\n/**\r\n * ステータス編集画面\r\n */\r\nconst StatusEditMain: React.FC = (props) => {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {/* メイン */}\r\n \r\n\r\n \r\n\r\n {/* 更新エリア */}\r\n \r\n \r\n \r\n\r\n {/* カード */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n );\r\n}\r\n\r\nexport default StatusEditMain;\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { StatusEditSlice, onGetReloadAsync, onOpenEditDialog, onOpenHistoryDialog } from '../../../../../modules/slice/status-edit/status-edit-slice';\r\n\r\n// type\r\nimport { MachineMaintenanceSettingItem, EditItem } from '../../_types';\r\n// component\r\nimport StatusEditMain from './StatusEditMain';\r\n\r\n/**\r\n * ステータス編集画面を表示します。\r\n */\r\nexport const StatusEditMainContainer: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const lastUpdatedAt = useSelector((state: RootState) => state.statusEdit.result.getStatusResult?.lastUpdatedAt ?? \"\");\r\n const statusData = useSelector((state: RootState) => state.statusEdit.result.getStatusResult?.item);\r\n const updateData = useSelector((state: RootState) => state.statusEdit.result.getClientRequestResult?.item);\r\n\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onUpdateClick = async () => {\r\n\r\n if (!machine) {\r\n dispatch(StatusEditSlice.actions.showErrorMessage(`施工機情報がありません。`));\r\n return;\r\n }\r\n\r\n await dispatch(onGetReloadAsync({ id: machine.item.id }))\r\n }\r\n\r\n /** 編集ボタンのクリック処理を行います。 */\r\n const onEditClick = (item: EditItem) => {\r\n dispatch(onOpenEditDialog(item));\r\n }\r\n\r\n /** 履歴ボタンのクリック処理を行います。 */\r\n const onHistoryClick = (item: EditItem) => {\r\n dispatch(onOpenHistoryDialog(item));\r\n }\r\n\r\n return (\r\n \r\n\r\n );\r\n}\r\n","/**\r\n * `@material-ui/TextField` 関連の ユーティリティ機能のを提供します。\r\n */\r\nexport class MuiTextFieldUtility {\r\n\r\n //#region フィールド\r\n\r\n /** 数値入力の最小入力値を表します*/\r\n static readonly NumericInputMinimum = 0\r\n /** 数値入力の最大入力値を表します*/\r\n static readonly NumericInputMaximum = 99999\r\n\r\n /** マイナス許容の数値入力の最小入力値を表します*/\r\n static readonly MinusNumericInputMinimum = -99999\r\n /** マイナス許容の数値入力の最大入力値を表します*/\r\n static readonly MinusNumericInputMaximum = 99999\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 数値入力値の制限を設定します。\r\n * @param value 入力値を指定します。\r\n */\r\n public static LimitationNumber(value: number): number | undefined {\r\n return MuiTextFieldUtility.LimitationInputNumber(value, false);\r\n }\r\n\r\n /**\r\n * 数値入力値の制限を設定します。\r\n * @param value 入力値を指定します。\r\n */\r\n public static LimitationNumberAllowMinus(value: number): number | undefined {\r\n return MuiTextFieldUtility.LimitationInputNumber(value, true);\r\n }\r\n\r\n /**\r\n * 数値入力値の制限を設定します。\r\n * @param value 入力値を指定します。\r\n * @param allowMinus マイナス値を許可するかどうかを指定します。\r\n */\r\n // Chorme で キーボードから上限を超えた数値が入力が出来てしまうので制限を設ける。\r\n private static LimitationInputNumber(value: number, allowMinus: boolean): number | undefined {\r\n let result: number | undefined = void 0;\r\n if (isFinite(value)) {\r\n const Maximun = allowMinus ? MuiTextFieldUtility.MinusNumericInputMaximum : MuiTextFieldUtility.NumericInputMaximum;\r\n const Minimum = allowMinus ? MuiTextFieldUtility.MinusNumericInputMinimum : MuiTextFieldUtility.NumericInputMinimum;\r\n // 入力制限値を超えた場合\r\n if (value > Maximun) result = Maximun;\r\n else if (value < Minimum) result = Minimum;\r\n else result = value;\r\n }\r\n // 正または負の Infinity か NaN か undefined の場合, undefined\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport {\r\n Dialog,\r\n DialogActions,\r\n DialogTitle,\r\n DialogContent,\r\n Typography,\r\n TextField,\r\n InputAdornment,\r\n IconButton,\r\n Divider,\r\n Box,\r\n} from '@material-ui/core';\r\nimport { Visibility, VisibilityOff } from '@material-ui/icons';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\n\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiUpdateButton from '../../../../../components/Buttons/MuiUpdateButton';\r\n\r\nimport { EditItem } from '../../_types'\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\nimport { MachineDataType } from '../../../MachineStatus/_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // サブタイトル\r\n subtitle: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 名称\r\n name: {\r\n fontSize: \"1.25rem\",\r\n marginRight: theme.spacing(1),\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n // divider\r\n divider: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 現在値\r\n currentValue: {\r\n \"&$disabled\": {\r\n color: theme.palette.text.primary,\r\n }\r\n },\r\n // 無効状態 (disabled状態の入力値の色をデフォルトで表示する)\r\n disabled: {},\r\n // ダイアログコンテンツ(ダイアログ内のTextfiledのlabelが全角4文字以上でスクロールが発生するで、無効にする)\r\n dialogContent: {\r\n overflowY: \"visible\"\r\n }\r\n }),\r\n);\r\n\r\n/** ステータス編集ダイアログの State を表示します。 */\r\nexport interface EditDialogState {\r\n /** 入力値を表します */\r\n value: number | null,\r\n /** カレンダー形式の入力値を表します */\r\n date: Date | null,\r\n /** アワメーターを表します。 */\r\n hrMeter: number | null,\r\n /** パスワードを表します */\r\n password: string | null,\r\n}\r\n\r\n/** バリデーションのエラー情報インターフェイスを提供します。 */\r\nexport interface ValidateInputItem {\r\n /** 変更後の値を表します。 */\r\n readonly value: string,\r\n /** アワメーターを表します。 */\r\n readonly hrMeter: string,\r\n /** 社番 を表します。 */\r\n readonly password: string;\r\n}\r\n\r\n\r\n/** ステータス編集ダイアログの Props を表示します。 */\r\ninterface Props {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** カレンダー入力かどうかを表します。 */\r\n isCalendar: boolean,\r\n /** アワメータの入力が必要かどうかを表します。 */\r\n isRequiredHrMeter: boolean,\r\n /** 更新するアイテムを表します。 */\r\n editItem: EditItem,\r\n /** 更新ボタンクリック時の処理を表します。 */\r\n onUpdateClick: (event: React.MouseEvent, input: EditDialogState,) => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n}\r\n\r\n/**\r\n * ステータス編集ダイアログを表示します。\r\n * @param props\r\n */\r\nconst EditDialog: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n\r\n if (props.isOpen === false) {\r\n setValues(preValues => ({\r\n value: null,\r\n date: null,\r\n hrMeter: null,\r\n password: null,\r\n }));\r\n }\r\n }, [props.isOpen])\r\n\r\n\r\n /** 入力内容を表します。 */\r\n const [values, setValues] = useState({\r\n value: null,\r\n date: null,\r\n hrMeter: null,\r\n password: null,\r\n });\r\n\r\n //const [inputDate, setInputDate] = useState(null);\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({\r\n value: \"\",\r\n hrMeter: \"\",\r\n password: \"\",\r\n })\r\n\r\n /** パスワードの表示状態を表します。 */\r\n const [isShowPassword, setIsShowPassword] = useState(false);\r\n\r\n /**\r\n * 入力項目 内容変更時のイベント処理を行います。\r\n * @param prop\r\n */\r\n const onChange = (name: keyof EditDialogState) => (event: React.ChangeEvent) => {\r\n // 値を選別\r\n const target = event.target;\r\n\r\n let value;\r\n if (name === \"hrMeter\") {\r\n // アワメーターはマイナスを許容する\r\n value = MuiTextFieldUtility.LimitationNumberAllowMinus(Number.parseInt(target.value, 10));\r\n } else {\r\n value = target.type === \"number\" ? MuiTextFieldUtility.LimitationNumber(Number.parseInt(target.value, 10)) : target.value;\r\n }\r\n\r\n // State の入力値は string 型で保持する\r\n value = !value ? value : value.toString();\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * 入力項目 内容変更時のイベント処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeDate = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換, 経過日数算出\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n // 入力項目更新\r\n setValues({ ...values, date: newValue });\r\n };\r\n\r\n\r\n /** パスワード表示非表示ボタン クリック時のイベント処理を行います。*/\r\n const handleClickShowPassword = () => {\r\n setIsShowPassword(preValue => !preValue);\r\n };\r\n\r\n /**\r\n * パスワード表示非表示ボタン マウスダウン時のイベント処理を行います。\r\n * @param event\r\n */\r\n const handleMouseDownPassword = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n };\r\n\r\n /** ダイアログの閉じる処理を行います。 */\r\n const onClose = () => {\r\n\r\n setValues({\r\n value: null,\r\n date: null,\r\n hrMeter: null,\r\n password: \"\",\r\n });\r\n\r\n setValidate({\r\n value: \"\",\r\n hrMeter: \"\",\r\n password: \"\",\r\n });\r\n\r\n props.handleClose();\r\n }\r\n\r\n /**\r\n * 更新ボタンのクリック処理を行います。\r\n * @param event\r\n */\r\n const onUpdate = (event: React.MouseEvent) => {\r\n\r\n // バリデーション\r\n const isError = onValidateInputItem()\r\n\r\n if (isError === false) {\r\n props.onUpdateClick(event, values);\r\n }\r\n }\r\n\r\n /** 入力内容のバリデーションを行います。 */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let valueError = \"\";\r\n let hourMeterError = \"\";\r\n let passError = \"\";\r\n\r\n // 更新値\r\n if (!props.isCalendar && values.value == null) {\r\n valueError = \"値を入力してください\";\r\n result = true;\r\n }\r\n // 更新値(カレンダー形式)\r\n if (props.isCalendar && values.date == null) {\r\n valueError = \"日付を選択してください\"\r\n result = true;\r\n }\r\n\r\n // アワメーター\r\n if (props.isRequiredHrMeter && values.hrMeter == null) {\r\n hourMeterError = \"アワメーターを入力してください\";\r\n result = true;\r\n }\r\n\r\n // パスワード\r\n if (!values.password) {\r\n passError = \"パスワードを入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n value: valueError,\r\n hrMeter: hourMeterError,\r\n password: passError,\r\n });\r\n\r\n // 結果\r\n return result;\r\n\r\n }\r\n\r\n /**\r\n * form 送信イベント処理を行います\r\n * @param e\r\n */\r\n const submitHandler = (e: React.FormEvent) => {\r\n // Enter key による submit を無効にする\r\n e.preventDefault();\r\n }\r\n\r\n\r\n return (\r\n \r\n {/* タイトル */}\r\n \r\n \r\n 施工機メンテナンス設定\r\n \r\n \r\n\r\n \r\n {/* message */}\r\n \r\n \r\n {`${props.editItem.name} [${props.editItem.unit}]`}\r\n \r\n の更新を行います。\r\n \r\n\r\n
submitHandler(e)}>\r\n {/* 現在値 */}\r\n \r\n\r\n \r\n\r\n {/* 更新値 */}\r\n {/* カスタムエラーメッセージ上書き\r\n * https://github.com/mui-org/material-ui-pickers/issues/574#issuecomment-433581882\r\n */}\r\n {props.isCalendar\r\n // カレンダー\r\n ? onChangeDate(data)}\r\n required\r\n error={!validate.value === false}\r\n helperText={validate.value}\r\n />\r\n // 数値入力\r\n : \r\n }\r\n\r\n {/* アワーメーター CTUなしかつ特定の項目のみ*/}\r\n {props.isRequiredHrMeter &&\r\n }\r\n\r\n {/* パスワード */}\r\n \r\n \r\n {isShowPassword ? : }\r\n \r\n \r\n )\r\n }}\r\n required\r\n error={!validate.password === false}\r\n helperText={validate.password}\r\n />\r\n \r\n
\r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n onUpdate(event)}\r\n />\r\n \r\n \r\n );\r\n}\r\n\r\nexport default EditDialog;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { StatusEditSlice, onUpdateClickAsync, onCloseDialog } from '../../../../../modules/slice/status-edit/status-edit-slice';\r\n\r\nimport { MachineMaintenanceSettingInputItem } from '../../_types'\r\nimport EditDialog, { EditDialogState } from './EditDialog';\r\nimport { ConnectedCtuType } from '../../../../../_types';\r\nimport { MachineDataType } from '../../../MachineStatus/_types';\r\nimport { SharedUtility } from '../../../../../modules/shared/shared-utility';\r\n\r\n/**\r\n * アワメータの入力が必要かどうかを判定します。\r\n * @param ctuType CTU接続種別を指定します。\r\n * @param itemType データ項目種別を指定します。\r\n */\r\nfunction requiredHrMeter(ctuType: ConnectedCtuType | undefined | null, itemType: MachineDataType | undefined | null): boolean {\r\n // CTUなし かつ 特定の項目のみ アワメータの入力が必要\r\n return ctuType === ConnectedCtuType.Disconnected\r\n && (itemType === MachineDataType.TotalTime // 本体稼働時間\r\n || itemType === MachineDataType.EngineTotalTime // エンジン稼働時間\r\n || itemType === MachineDataType.MainPumpTotalTime // メインポンプ稼働時間\r\n || itemType === MachineDataType.AugerTotalTime1 // オーガー1稼働時間\r\n || itemType === MachineDataType.AugerTotalTime2 // オーガー2稼働時間\r\n || itemType === MachineDataType.GearPumpTotalTime // ギアポンプ稼働時間\r\n || itemType === MachineDataType.WorkingOilTime // 作動油交換後時間\r\n || itemType === MachineDataType.OilElementTime // オイルエレメント交換後時間\r\n || itemType === MachineDataType.FuelElementTime // 燃料エレメント交換後時間\r\n || itemType === MachineDataType.EngineOilTime // エンジンオイル交換後時間\r\n || itemType === MachineDataType.AirElementTime // エアーエレメント交換後時間\r\n || itemType === MachineDataType.WorkingOilElementTime // 作動油エレメント交換後時間\r\n || itemType === MachineDataType.FanBeltTime // ファンベルト交換後時間\r\n || itemType === MachineDataType.StarterMotorTime // セルモーター交換後時間\r\n || itemType === MachineDataType.OilPressurePumpDeceleratorOilTime // 油圧ポンプ減速機オイル交換後時間\r\n || itemType === MachineDataType.AlternatorTime // オルタネーター交換後時間\r\n || itemType === MachineDataType.OilPressurePumpCouplingTime // 油圧ポンプカップリング交換後時間\r\n || itemType === MachineDataType.WinchDeceleratorOilTime // ウインチ減速機オイル交換後時間\r\n );\r\n}\r\n\r\n/**\r\n * カレンダー入力形式化どうかを判定します。\r\n * @param itemType\r\n */\r\nfunction isInputCalendar(itemType: MachineDataType | undefined | null): boolean {\r\n return (itemType === MachineDataType.SelfInspection // 67: 特定自主検査\r\n || itemType === MachineDataType.BatteryTime // 55: バッテリー交換後日数 \r\n || itemType === MachineDataType.CoolantTime // 56: クーラント交換後日数\r\n || itemType === MachineDataType.PrimaryHoistingWire // 63: 主巻ワイヤ交換後日数\r\n || itemType === MachineDataType.SubHoistingWire // 64: 補巻ワイヤ交換後日数\r\n || itemType === MachineDataType.UpsAndDownsWire // 65: 起伏ワイヤ交換後日数\r\n || itemType === MachineDataType.PendantRope // 66: ペンダントロープ交換後日数\r\n );\r\n}\r\n\r\n/**\r\n * ステータス編集ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const EditDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.statusEdit.item.isOpenEdit);\r\n const editItem = useSelector((state: RootState) => state.statusEdit.item.editItem ?? null);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine ?? null);\r\n\r\n /** 更新ボタンのクリック処理を行います。*/\r\n const onUpdateClick = async (event: React.MouseEvent, input: EditDialogState) => {\r\n\r\n // バリデーション\r\n const error = validateMachineInfo();\r\n if (error !== \"\") {\r\n // エラーメッセージ\r\n dispatch(StatusEditSlice.actions.showErrorMessage(error));\r\n return;\r\n }\r\n\r\n if (machine?.item != null && editItem?.type != null && input.password != null) { // 明示的にnullでないことを書く\r\n\r\n let value = \"\";\r\n if (isInputCalendar(editItem.type)) {\r\n value = input.date ? SharedUtility.toDateTimeString(input.date) : \"\";\r\n } else {\r\n value = input.value?.toString() ?? \"\";\r\n }\r\n // 入力情報の整形\r\n const inputItem: MachineMaintenanceSettingInputItem = {\r\n machineDataType: editItem.type,\r\n value: value,\r\n hrMeter: input.hrMeter ?? void 0,\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onUpdateClickAsync(\r\n {\r\n id: machine.item.id,\r\n reset: inputItem\r\n },\r\n input.password\r\n ));\r\n\r\n }\r\n }\r\n\r\n /**\r\n * 施工機情報のバリデーションを行います。\r\n * */\r\n const validateMachineInfo = (): string => {\r\n let result = \"\";\r\n\r\n // バリデーション\r\n if (machine?.item == null) {\r\n result = \"施工機情報がありません。\"\r\n } else if (editItem?.type == null) {\r\n result = \"施工機ステータス情報がありません。\"\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n if (machine?.item?.id == null) {\r\n dispatch(StatusEditSlice.actions.showErrorMessage(\"施工機情報がありません。\"));\r\n return;\r\n }\r\n\r\n dispatch(onCloseDialog({ id: machine.item.id }));\r\n };\r\n\r\n return (\r\n <>\r\n {editItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport clsx from 'clsx';\r\nimport MaterialTable, { Column } from 'material-table';\r\nimport { Box } from '@material-ui/core';\r\nimport { MachineMaintenanceSettingResetHistoryListItem } from '../../_types'\r\nimport { MuiTableIcons, MuiTableOptions, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { useStyles } from '../../../Shared/ConstructionMchineMasterTableStyles';\r\nimport indigo from '@material-ui/core/colors/indigo';\r\n\r\n/** リセット履歴テーブル項目の State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/** リセット履歴テーブルのカラムを表します。 */\r\nconst columnData: Column[] = [\r\n {\r\n title: \"日時\",\r\n field: \"resetAt\",\r\n width: 300,\r\n },\r\n {\r\n title: \"更新値\",\r\n field: \"resetValue\",\r\n width: 300,\r\n },\r\n];\r\n\r\n\r\n/** ステータス編集ダイアログの Props を表示します。 */\r\ninterface Props {\r\n /** リセット履歴を表します。*/\r\n dataSource: MachineMaintenanceSettingResetHistoryListItem[],\r\n}\r\n\r\n/**\r\n * リセット履歴ダイアログを表示します。\r\n * @param props\r\n */\r\nconst ResetHistoryTable: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** カラム情報を表します。 */\r\n const [values] = useState({\r\n columns: columnData,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ResetHistoryTable;\r\n","import * as React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport ResetHistoryTable from './ResetHistoryTable';\r\nimport { MachineMaintenanceSettingResetHistoryListItem, MachineMaintenanceSettingResetHistoryItem } from '../../_types';\r\nimport { MachineDataType } from '../../../MachineStatus/_types';\r\n\r\n/**\r\n * リセット履歴テーブルを表示します。\r\n * @param props\r\n */\r\nexport const ResetHistoryTableContainer: React.FC<{}> = (props) => {\r\n\r\n // redux store\r\n const editItem = useSelector((state: RootState) => state.statusEdit.item.editItem);\r\n const data = useSelector((state: RootState) => state.statusEdit.result.getResetHistoryResult?.items);\r\n\r\n /**\r\n * データソースに変換します。\r\n * @param data リセット履歴リストを指定します。\r\n */\r\n const toDataSource = (data?: MachineMaintenanceSettingResetHistoryItem[], type?: MachineDataType) => {\r\n\r\n let result: MachineMaintenanceSettingResetHistoryListItem[] = [];\r\n if (data == null || type == null) return result;\r\n\r\n result = data.find(item => item.machineDataType === type)?.resetHistories ?? []\r\n return result;\r\n }\r\n\r\n return (\r\n ({ ...item }))}\r\n />\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport { Dialog, DialogTitle, DialogContent, Typography, IconButton, Box } from '@material-ui/core';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { EditItem } from '../../_types'\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useHistoryStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n },\r\n // タイトルアイコン\r\n icon: {\r\n marginRight: theme.spacing(1),\r\n\r\n },\r\n // 閉じるボタンアイコン\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n },\r\n // サブタイトル\r\n subtitle: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 名称\r\n name: {\r\n fontSize: \"1.25rem\",\r\n marginRight: theme.spacing(1),\r\n },\r\n // テーブル\r\n table: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n }),\r\n);\r\n\r\n/** リセット履歴ダイアログの Props を表示します。 */\r\ninterface Props {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n /** 表示する項目を表します。 */\r\n editItem: EditItem,\r\n /** リセット履歴テーブルを表します。 */\r\n table: JSX.Element,\r\n}\r\n\r\n/**\r\n * リセット履歴ダイアログを表示します。\r\n * @param props\r\n */\r\nconst HisrotyDialog: React.FC = (props) => {\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useHistoryStyles();\r\n\r\n /** ダイアログ開閉状態を表します。 */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n }, [props.isOpen])\r\n\r\n /** ダイアログの閉じる処理を行います。 */\r\n const onClose = () => {\r\n props.handleClose();\r\n }\r\n\r\n return (\r\n \r\n {/* タイトル */}\r\n \r\n \r\n \r\n リセット履歴\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {/* message */}\r\n \r\n \r\n {`${props.editItem.name} [${props.editItem.unit}]`}\r\n \r\n \r\n\r\n {/* リセット履歴テーブル */}\r\n {props.table}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default HisrotyDialog;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { StatusEditSlice, onCloseDialog, onGetRestHistoryAsync } from '../../../../../modules/slice/status-edit/status-edit-slice';\r\nimport { ResetHistoryTableContainer } from '../ResetHistoryTable/ResetHistoryTableContainer';\r\nimport HistoryDialog from './HistoryDialog';\r\n/**\r\n * リセット履歴ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const HistoryDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.statusEdit.item.isOpenHsitory);\r\n const editItem = useSelector((state: RootState) => state.statusEdit.item.editItem);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n if (machine?.item?.id == null) {\r\n dispatch(StatusEditSlice.actions.showErrorMessage(\"施工機情報がありません。\"));\r\n return;\r\n }\r\n\r\n dispatch(onCloseDialog({ id: machine.item.id }));\r\n };\r\n\r\n useEffect(() => {\r\n\r\n if (isOpen) {\r\n if (!machine) {\r\n dispatch(StatusEditSlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else if (!editItem) {\r\n dispatch(StatusEditSlice.actions.showErrorMessage(\"リセット項目が指定されていません\"));\r\n } else {\r\n\r\n dispatch(onGetRestHistoryAsync({\r\n id: machine.item.id,\r\n machineDataType: editItem.type\r\n }))\r\n }\r\n }\r\n }, [dispatch, machine, editItem, isOpen]);\r\n\r\n\r\n return (\r\n <>\r\n {editItem &&\r\n }\r\n\r\n />\r\n }\r\n \r\n );\r\n}\r\n","// 各画面\r\nimport { MaintenanceRecord } from '../../../MaintenanceRecord';\r\nimport { ConstructionRecord } from '../../../ConstructionRecord';\r\nimport { MachineStatus } from '../../../MachineStatus';\r\nimport { AlertRecord } from '../../../AlertRecord';\r\nimport { DailyInspectionRecord } from '../../../DailyInspectionRecord';\r\nimport { WeeklyInspectionRecord } from '../../../WeeklyInspectionRecord';\r\nimport { CompletionInspectionRecord } from '../../../CompletionInspectionRecord';\r\nimport { StatusEditPage } from '../../../StatusEdit';\r\nimport { AppTitle } from '../../../../Shared/app-title';\r\nimport { AppUrl } from '../../../../Shared/app-url';\r\nimport { TabItem } from '../../_types';\r\n\r\n/** 施工機管理系タブのアイテムを提供します。 */\r\nexport class RecordPageTabItems {\r\n /** 整備記録 */\r\n public static readonly maintenanceRecord: TabItem = {\r\n label: AppTitle.recordMaintenanceRecord.title,\r\n path: AppUrl.recordMaintenanceRecord.path,\r\n tabValue: AppUrl.recordMaintenanceRecord.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: MaintenanceRecord,\r\n }\r\n /** 日常点検記録 */\r\n public static readonly dailyInspectionRecord: TabItem = {\r\n label: AppTitle.recordDailyInspectionRecord.title,\r\n path: AppUrl.recordDailyInspectionRecord.path,\r\n tabValue: AppUrl.recordDailyInspectionRecord.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: DailyInspectionRecord,\r\n }\r\n /** 週間月例点検記録 */\r\n public static readonly weeklyInspectionRecord: TabItem = {\r\n label: AppTitle.recordWeeklyInspectionRecord.title,\r\n path: AppUrl.recordWeeklyInspectionRecord.path,\r\n tabValue: AppUrl.recordWeeklyInspectionRecord.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: WeeklyInspectionRecord,\r\n }\r\n /** 現場完了点検記録 */\r\n public static readonly completionInspectionRecord: TabItem = {\r\n label: AppTitle.recordCompletionInspectionRecord.title,\r\n path: AppUrl.recordCompletionInspectionRecord.path,\r\n tabValue: AppUrl.recordCompletionInspectionRecord.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: CompletionInspectionRecord,\r\n }\r\n /** 施工記録 */\r\n public static readonly constructionRecord: TabItem = {\r\n label: AppTitle.recordConstructionRecord.title,\r\n path: AppUrl.recordConstructionRecord.path,\r\n tabValue: AppUrl.recordConstructionRecord.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: ConstructionRecord,\r\n }\r\n /** 施工機ステータス */\r\n public static readonly machineStatus: TabItem = {\r\n label: AppTitle.recordMachineStatus.title,\r\n path: AppUrl.recordMachineStatus.path,\r\n tabValue: AppUrl.recordMachineStatus.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: MachineStatus,\r\n }\r\n /** 施工機メンテナンス設定 */\r\n public static readonly machineMaintenanceSetting: TabItem = {\r\n label: AppTitle.recordMachineMaintenanceSetting.title,\r\n path: AppUrl.recordMachineMaintenanceSetting.path,\r\n tabValue: AppUrl.recordMachineMaintenanceSetting.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: StatusEditPage,\r\n }\r\n /** アラート記録 */\r\n public static readonly alertRecord: TabItem = {\r\n label: AppTitle.recordAlertRecord.title,\r\n path: AppUrl.recordAlertRecord.path,\r\n tabValue: AppUrl.recordAlertRecord.path.replace(`${AppUrl.record.path}/`, \"\"),\r\n component: AlertRecord,\r\n }\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MaintenanceRecordSlice, onGetAsync } from '../../../modules/slice/maintenance-record/maintenance-record-slice';\r\n// component\r\nimport MaintenanceRecordTableContainer from './components/TableContent/MaintenanceRecordTableContainer';\r\nimport MaintenanceSearchContainer from './components/SearchContent/MaintenanceRecordSearchContainer';\r\nimport { StampContainer } from './components/StampContent/StampContainer';\r\nimport { ViewerContainer } from './components/ViewerContent/ViewerContainer';\r\n// 共通component\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport CollapseLayout from '../../../components/Layout/CollapseLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\nimport { MaintenanceRecordSearchType, StampSearchType } from './_types';\r\nimport TopAndBottomLayout from '../../../components/Layout/TopAndBottomLayout';\r\nimport { AreaToggleButtonContainer } from '../../../components/AreaToggleButton/AreaToggleButtonContainer';\r\n\r\n/**\r\n * 整備記録画面を表示します。\r\n * */\r\nexport const MaintenanceRecord: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.maintenanceRecord.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.maintenanceRecord.isReportLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.maintenanceRecord.isShowMessage);\r\n const message = useSelector((state: RootState) => state.maintenanceRecord.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const isOpenViewer = useSelector((state: RootState) => state.maintenanceRecord.isOpenViewer ?? true);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MaintenanceRecordSlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n // タイトル変更\r\n dispatch(changeRecordPageHeader((AppTitle.recordMaintenanceRecord.title)));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n if (!machine) {\r\n dispatch(MaintenanceRecordSlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: \"\",\r\n searchType: MaintenanceRecordSearchType.None,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n\r\n useEffect(() => {\r\n\r\n return () => {\r\n // unmout 時にビューワを非表示にする\r\n dispatch(MaintenanceRecordSlice.actions.toggleViewre(false));\r\n }\r\n\r\n }, [dispatch])\r\n\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* 整備記録 */}\r\n }\r\n bottomContent={}\r\n />\r\n }\r\n // テーブル\r\n main={}\r\n />\r\n }\r\n expandContent={isOpenViewer\r\n ? }\r\n // ビューワ\r\n main={}\r\n />\r\n : <>\r\n }\r\n />\r\n\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { DailyInspectionRecordSlice, onGetAsync } from '../../../modules/slice/daily-inspection-record/daily-inspection-record-slice';\r\n// component\r\nimport { DailyInspectionRecordTableContainer } from './components/TableContent/DailyInspectionRecordTableContainer';\r\nimport { DailyInspectionSearchContainer } from './components/SearchContent/DailyInspectionSearchContainer';\r\nimport { StampContainer } from './components/StampContent/StampContainer';\r\nimport { ViewerContainer } from './components/ViewerContent/ViewerContainer';\r\n\r\n// 共通component\r\nimport CollapseLayout from '../../../components/Layout/CollapseLayout';\r\nimport TopAndBottomLayout from '../../../components/Layout/TopAndBottomLayout';\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\nimport { DailyInspectionRecordSearchType, StampSearchType } from './_types';\r\nimport { AreaToggleButtonContainer } from '../../../components/AreaToggleButton/AreaToggleButtonContainer';\r\n\r\n/**\r\n * 日常点検記録画面を提供します。\r\n * */\r\nexport const DailyInspectionRecord: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.dailyInspectionRecord.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.dailyInspectionRecord.isReportLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.dailyInspectionRecord.isShowMessage);\r\n const message = useSelector((state: RootState) => state.dailyInspectionRecord.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const isOpenViewer = useSelector((state: RootState) => state.dailyInspectionRecord.isOpenViewer ?? true);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(DailyInspectionRecordSlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n // タイトル変更\r\n dispatch(changeRecordPageHeader((AppTitle.recordDailyInspectionRecord.title)));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n if (!machine) {\r\n dispatch(DailyInspectionRecordSlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: \"\",\r\n searchType: DailyInspectionRecordSearchType.None,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n useEffect(() => {\r\n\r\n return () => {\r\n // unmout 時にビューワを非表示にする\r\n dispatch(DailyInspectionRecordSlice.actions.toggleViewre(false));\r\n }\r\n\r\n }, [dispatch])\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* 日常点検記録 */}\r\n }\r\n bottomContent={}\r\n />\r\n }\r\n // テーブル\r\n main={}\r\n />\r\n }\r\n expandContent={\r\n isOpenViewer\r\n ? }\r\n // ビューワ\r\n main={}\r\n />\r\n : <>\r\n }\r\n />\r\n\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { WeeklyInspectionRecordSlice, onGetAsync } from '../../../modules/slice/weekly-inspection-record/weekly-inspection-record-slice';\r\n// component\r\nimport { WeeklyInspectionRecordTableContainer } from './components/TableContent/WeeklyInspectionRecordTableContainer';\r\nimport { WeeklyInspectionSearchContainer } from './components/SearchContent/WeeklyInspectionSearchContainer';\r\nimport { StampContainer } from './components/StampContent/StampContainer';\r\nimport { ViewerContainer } from './components/ViewerContent/ViewerContainer';\r\n// 共通component\r\nimport CollapseLayout from '../../../components/Layout/CollapseLayout';\r\nimport TopAndBottomLayout from '../../../components/Layout/TopAndBottomLayout';\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { WeeklyInspectionRecordSearchType, StampSearchType } from './_types';\r\nimport { AreaToggleButtonContainer } from '../../../components/AreaToggleButton/AreaToggleButtonContainer';\r\n\r\n/**\r\n * 週間月例点検記録画面を提供します。\r\n * */\r\nexport const WeeklyInspectionRecord: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.weeklyInspectionRecord.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.weeklyInspectionRecord.isReportLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.weeklyInspectionRecord.isShowMessage);\r\n const message = useSelector((state: RootState) => state.weeklyInspectionRecord.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n const isOpenViewer = useSelector((state: RootState) => state.weeklyInspectionRecord.isOpenViewer ?? true);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(WeeklyInspectionRecordSlice.actions.hideMessage());\r\n };\r\n\r\n\r\n useEffect(() => {\r\n // タイトル変更\r\n dispatch(changeRecordPageHeader((AppTitle.recordWeeklyInspectionRecord.title)));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n if (!machine) {\r\n dispatch(WeeklyInspectionRecordSlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: \"\",\r\n searchType: WeeklyInspectionRecordSearchType.None,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n\r\n useEffect(() => {\r\n\r\n return () => {\r\n // unmout 時にビューワを非表示にする\r\n dispatch(WeeklyInspectionRecordSlice.actions.toggleViewre(false));\r\n }\r\n\r\n }, [dispatch])\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* 週間月例点検記録 */}\r\n }\r\n bottomContent={}\r\n />\r\n }\r\n // テーブル\r\n main={}\r\n />\r\n }\r\n expandContent={\r\n isOpenViewer\r\n ? }\r\n // ビューワ\r\n main={}\r\n />\r\n : <>\r\n }\r\n />\r\n\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { CompletionInspectionRecordSlice, onGetAsync } from '../../../modules/slice/completion-inspection-record/completion-inspection-record-slice';\r\n// component\r\nimport { CompletionInspectionRecordTableContainer } from './components/TableContent/CompletionInspectionRecordTableContainer';\r\nimport { CompletionInspectionSearchContainer } from './components/SearchContent/CompletionInspectionSearchContainer';\r\nimport { StampContainer } from './components/StampContent/StampContainer';\r\nimport { ViewerContainer } from './components/ViewerContent/ViewerContainer';\r\n// 共通component\r\nimport CollapseLayout from '../../../components/Layout/CollapseLayout';\r\nimport TopAndBottomLayout from '../../../components/Layout/TopAndBottomLayout';\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\nimport { CompletionInspectionRecordSearchType, StampSearchType } from './_types';\r\nimport { AreaToggleButtonContainer } from '../../../components/AreaToggleButton/AreaToggleButtonContainer';\r\n\r\n/**\r\n * 現場完了時点検記録画面を提供します。\r\n * */\r\nexport const CompletionInspectionRecord: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.completionInspectionRecord.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.completionInspectionRecord.isReportLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.completionInspectionRecord.isShowMessage);\r\n const message = useSelector((state: RootState) => state.completionInspectionRecord.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n const isOpenViewer = useSelector((state: RootState) => state.completionInspectionRecord.isOpenViewer ?? true);\r\n\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(CompletionInspectionRecordSlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n // タイトル変更\r\n dispatch(changeRecordPageHeader((AppTitle.recordCompletionInspectionRecord.title)));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n if (!machine) {\r\n dispatch(CompletionInspectionRecordSlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n machineType: machine.type,\r\n keyword: \"\",\r\n searchType: CompletionInspectionRecordSearchType.None,\r\n searchStampType: StampSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n useEffect(() => {\r\n\r\n return () => {\r\n // unmout 時にビューワを非表示にする\r\n dispatch(CompletionInspectionRecordSlice.actions.toggleViewre(false));\r\n }\r\n\r\n }, [dispatch])\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* 現場完了時点検記録 */}\r\n }\r\n bottomContent={}\r\n />\r\n }\r\n // テーブル\r\n main={}\r\n />\r\n }\r\n expandContent={\r\n isOpenViewer\r\n ? }\r\n // ビューワ\r\n main={}\r\n />\r\n : <>\r\n }\r\n />\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MachineOperationHistorySlice, onGetAsync } from '../../../modules/slice/machine-operation-history/machine-operation-history-slice'\r\n// component\r\nimport { ConstructionRecordMain } from './components/MainContent/ConstructionRecordMain';\r\nimport { ConstructionRecordSerchContainer } from './components/SearchContent/ConstructionRecordSearchContainer';\r\nimport { ConstructionRecordCardListContainer } from './components/CardContent/ConstructionRecordCardListContainer';\r\nimport { ConstructionRecordGraphContainer } from './components/GraphContent/ConstructionRecordGraphContainer';\r\nimport { DownloadButtonContainer } from './components/DownloadContent/DownloadButtonContainer';\r\n\r\n// 共通component\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n\r\n/**\r\n * 施工記録画面を提供します。\r\n * */\r\nexport const ConstructionRecord: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.machineOperationHistory.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.machineOperationHistory.isShowMessage);\r\n const message = useSelector((state: RootState) => state.machineOperationHistory.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MachineOperationHistorySlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n // タイトル変更\r\n dispatch(changeRecordPageHeader((AppTitle.recordConstructionRecord.title)));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n if (!machine) {\r\n dispatch(MachineOperationHistorySlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* 施工記録 */}\r\n < TwoColumnLayout\r\n // 検索エリア\r\n side={}\r\n // 検査結果\r\n main={}\r\n cards={}\r\n graph={}\r\n />}\r\n />\r\n\r\n\r\n \r\n\r\n\r\n );\r\n};\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MachineStatusMonitoringSlice, onGetReloadAsync } from '../../../modules/slice/machine-status-monitoring/machine-status-monitoring-slice';\r\n// components\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { MachineStatusMonitoringMainContainer } from './components/MainContent/MachineStausMonitoringMainContainer';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * 施工機ステータス画面\r\n */\r\nexport const MachineStatus: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.machineStatusMonitoring.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.machineStatusMonitoring.isShowMessage);\r\n const message = useSelector((state: RootState) => state.machineStatusMonitoring.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MachineStatusMonitoringSlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n }, [dispatch]);\r\n\r\n\r\n useEffect(() => {\r\n dispatch(changeRecordPageHeader(AppTitle.recordMachineStatus.title));\r\n\r\n if (machine) {\r\n // 初期表示時に実行\r\n // 定期的に施工機の一覧取得を行う。\r\n dispatch(onGetReloadAsync({ id: machine.item.id }))\r\n }\r\n\r\n // unmout 時にタイマークリア\r\n return () => {\r\n dispatch(MachineStatusMonitoringSlice.actions.stopReloadTimer());\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n\r\n {/*メイン画面*/}\r\n \r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { StatusEditSlice, onGetReloadAsync } from '../../../modules/slice/status-edit/status-edit-slice';\r\n// 共通component\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\n// component\r\nimport { StatusEditMainContainer } from './components/MainContent/StatusEditMainContainer';\r\nimport { EditDialogContainer } from './components/EditDialog/EditDialogContainer';\r\nimport { HistoryDialogContainer } from './components/HistoryDialog/HistoryDialogContainer';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n* ステータス編集画面を表示します。\r\n* */\r\nexport const StatusEditPage: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.statusEdit.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.statusEdit.isShowMessage);\r\n const message = useSelector((state: RootState) => state.statusEdit.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(StatusEditSlice.actions.hideMessage());\r\n };\r\n\r\n\r\n useEffect(() => {\r\n dispatch(changeRecordPageHeader(AppTitle.recordMachineMaintenanceSetting.title));\r\n\r\n if (!machine) {\r\n\r\n dispatch(StatusEditSlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n\r\n dispatch(onGetReloadAsync({ id: machine.item.id }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* メイン */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n \r\n\r\n \r\n\r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeRecordPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MachineErrorHistorySlice, onGetAsync } from '../../../modules/slice//machine-error-history/machine-error-history-slice';\r\n// 共通component\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\n// component\r\nimport { AlertRecordMain } from './components/MainContent/AlertRecordMain'\r\nimport { AlertRecordSearchContainer } from './components/SearchContent/AlertRecordSearchContainer';\r\nimport { AlertRecordTableContainer } from './components/TableContent/AlertRecordTableContainer';\r\nimport { AlertRecordGraphContainer } from './components/GraphContent/AlertRecordGraphContainer'\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * アラート履歴画面を表示します。\r\n * */\r\nexport const AlertRecord: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.machineErrorHistory.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.machineErrorHistory.isShowMessage);\r\n const message = useSelector((state: RootState) => state.machineErrorHistory.message);\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine)\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MachineErrorHistorySlice.actions.hideMessage());\r\n };\r\n\r\n useEffect(() => {\r\n // タイトル変更\r\n dispatch(changeRecordPageHeader((AppTitle.recordAlertRecord.title)));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n if (!machine) {\r\n dispatch(MachineErrorHistorySlice.actions.showErrorMessage(\"施工機情報が指定されていません\"));\r\n } else {\r\n dispatch(onGetAsync({\r\n item: {\r\n machineId: machine.item.id,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n }\r\n }))\r\n }\r\n\r\n }, [dispatch, machine]);\r\n\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n }\r\n // 検索結果\r\n main={}\r\n graph={}\r\n />}\r\n />\r\n \r\n\r\n );\r\n};\r\n","//react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タブ\r\n tab: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n },\r\n // 要素コンテンツ\r\n content: {\r\n minHeight: `calc(100vh - calc(64px + 48px + ${theme.spacing(5)}px))`,\r\n overflowX: \"auto\",\r\n padding: theme.spacing(1),\r\n },\r\n }),\r\n);\r\n\r\n/** タブ有り画面レイアウトの Props を提供します。*/\r\ninterface Props {\r\n /** タブを表します。 */\r\n tab: JSX.Element,\r\n /** コンテンツを表します。 */\r\n content: JSX.Element,\r\n}\r\n\r\n/**\r\n * タブ有り画面レイアウトを表示します。\r\n * */\r\nexport function TabPageContentLayout(props: Props) {\r\n\r\n /** Style を表します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n\r\n {/* タブ */}\r\n \r\n {props.tab}\r\n \r\n\r\n {/* コンテンツ */}\r\n \r\n {props.content}\r\n \r\n\r\n \r\n\r\n );\r\n\r\n};\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// router\r\nimport { Route } from 'react-router-dom';\r\n// material-ui\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\n// 各画面ルート\r\nimport { RecordPageTabItems } from './TabListUtility'\r\nimport { TabPageContentLayout } from '../../../../../components/Layout/TabPageContentLayout';\r\n\r\n\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 縦区切り線\r\n divider: {\r\n margin: theme.spacing(0.5, 0),\r\n },\r\n // タブ\r\n tab: {\r\n color: theme.palette.text.secondary,\r\n // アクティブタブ\r\n \"& .Mui-selected\": {\r\n color: theme.palette.primary.contrastText,\r\n backgroundColor: fade(theme.palette.primary.main, 0.8),\r\n },\r\n },\r\n // 戻るボタン\r\n backButton: {\r\n margin: theme.spacing(0, 1, 0, 1),\r\n },\r\n }),\r\n);\r\n\r\n/** 施工機管理画面タブリストの Props を提供します。*/\r\ninterface Props {\r\n /** 選択されているタブを表します。 */\r\n selectedTab: string,\r\n /** ベースマシンが選択されているかどうかを表します。 */\r\n isBaseMachine: boolean,\r\n /** 施工機がロックされているかどうかを表します。 */\r\n isLock: boolean,\r\n /** タブクリック時のイベントを表します。 */\r\n onTabClick: (event: React.ChangeEvent<{}>, selectedTab: string) => void,\r\n /** 戻るボタンクリックのイベントを表します。 */\r\n onBackLinkClick: () => void,\r\n}\r\n\r\n/**\r\n * 施工機管理画面タブリストを表示します。\r\n * */\r\nexport function TabList(props: Props) {\r\n\r\n /** Style を表します。 */\r\n const classes = useStyles();\r\n\r\n /** State を表します。*/\r\n const [path, setPath] = useState(RecordPageTabItems.maintenanceRecord.tabValue);\r\n\r\n\r\n React.useEffect(() => {\r\n setPath(props.selectedTab);\r\n }, [props])\r\n\r\n\r\n return (\r\n \r\n\r\n {/* 戻るボタン */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* タブ */}\r\n \r\n {/* 施工機ステータス */}\r\n {(props.isBaseMachine && props.isLock) && // ベースマシン ロック状態のみ\r\n \r\n }\r\n\r\n {/* 整備記録 */}\r\n \r\n\r\n {/* 日常点検記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 週間・月例点検記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 現場完了時点検記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 施工記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 施工機メンテナンス設定 */}\r\n {(props.isBaseMachine && props.isLock) && // ベースマシンのみ ロック状態のみ\r\n \r\n }\r\n {/* アラート記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n \r\n\r\n }\r\n content={<>\r\n {/* 施工機ステータス */}\r\n {(props.isBaseMachine && props.isLock) && // ベースマシンのみ ロック状態のみ\r\n \r\n }\r\n\r\n {/* 整備記録 */}\r\n \r\n\r\n {/* 日常点検記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 週間・月例点検記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 現場完了時点検記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* 施工記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n {/* ステータス編集 */}\r\n {(props.isBaseMachine && props.isLock) && // ベースマシンのみ ロック状態のみ\r\n\r\n \r\n }\r\n {/* アラート記録 */}\r\n {props.isBaseMachine && // ベースマシンのみ\r\n \r\n }\r\n\r\n }\r\n />\r\n );\r\n\r\n};\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// redux\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\n// router\r\nimport { Route, useHistory, useRouteMatch, useParams } from 'react-router-dom';\r\n\r\nimport { MachineType, ConnectedCtuType } from '../../../_types';\r\nimport { TabList } from './component/TabList/TabList';\r\nimport { AppUrl } from '../../Shared/app-url';\r\nimport { HeaderMachineState } from '../../Shared/GlobalHeader/_types';\r\n\r\n/** Params を提供します。 */\r\ninterface Params {\r\n /** タブを表します。 */\r\n tab: string,\r\n}\r\n\r\n/**\r\n * 施工機管理画面 を提供します。\r\n * */\r\nexport function ConstructionMachineMasterTab() {\r\n\r\n /** Hisotry を表します。*/\r\n const history = useHistory();\r\n\r\n /** ルート情報を表します。 */\r\n const match = useRouteMatch(`${AppUrl.record.path}/:tab`);\r\n\r\n /** URLパラメータのタブを表します。 */\r\n const { tab } = useParams();\r\n\r\n /** 施工機種別 を表します。*/\r\n const machine = useSelector((state: RootState) => state.globalHeader.machine);\r\n\r\n /**\r\n * タブ選択時の処理を行います。\r\n * @param event\r\n * @param selectedTab\r\n */\r\n const handleChange = (event: React.ChangeEvent<{}>, selectedTab: string) => {\r\n match && history.push({\r\n pathname: `${AppUrl.record.path}/${selectedTab}`,\r\n state: machine,\r\n });\r\n };\r\n\r\n /**\r\n * 施工機モニター画面へ戻る処理を行います。\r\n * */\r\n const onBackLink = () => {\r\n history.push(AppUrl.machineMonitoring.path);\r\n };\r\n\r\n return (\r\n <>\r\n {machine &&\r\n }\r\n \r\n\r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { ConstructionMachineMasterTab } from './ConstructionMachineMasterTab';\r\nimport { HeaderPage } from '../Shared/HeaderPage/HeaderPage';\r\n\r\n/**\r\n * 記録系画面を表示します。\r\n */\r\nexport const ConstructionMachineMasterPage: React.FC<{}> = () => {\r\n return (\r\n } />\r\n );\r\n}\r\n","//export * from './other-report-list-item';\r\n//export * from './other-report-input-item';\r\n//export * from './other-report-search-type';\r\n\r\n\r\nimport { AreaType } from \"../../../../_types\";\r\n\r\n/** 検索種別を表す列挙値を提供します。 */\r\nexport enum OtherReportSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 報告者を表します。 */\r\n Reporter = 1,\r\n /** 報告事項を表します。 */\r\n Report = 2,\r\n}\r\n\r\n/** 画像検索条件を表す列挙値を提供します。 */\r\nexport enum OtherReportImageSearchType {\r\n /** 未指定を表します。 */\r\n None = 0,\r\n /** 画像ありを表します。 */\r\n With = 1,\r\n /** 画像なしを表します。 */\r\n Without = 2,\r\n}\r\n\r\n/**\r\n * その他報告のテーブル項目のインターフェイスを提供します。\r\n */\r\nexport interface OtherReportListItem {\r\n /** 管理No. を表します。 */\r\n readonly no: string;\r\n /** 報告事項を表します。 */\r\n readonly item: string;\r\n /** 報告日時を表します。 */\r\n readonly reportAt: string;\r\n /** エリアを表します。 */\r\n readonly area: string;\r\n /** エリア種別を表します。*/\r\n readonly areaType: AreaType;\r\n /** 報告者を表します。 */\r\n readonly reporter: string;\r\n /** 作業場所を表します。 */\r\n readonly site: string;\r\n /** 画像保存パスを表します。 */\r\n readonly imagePaths: string[];\r\n}\r\n\r\n\r\n/**\r\n * その他報告画面の入力項目のインターフェイスを提供します。\r\n * */\r\nexport interface OtherReportInputItem {\r\n /** キーワードを表します。 */\r\n keyword: string;\r\n /** 検索種別を表します。 */\r\n searchType: OtherReportSearchType;\r\n /** 開始日を表します。 */\r\n beginAt: Date | null;\r\n /** 終了日を表します。 */\r\n endAt: Date | null;\r\n /** 画像有無を表します。*/\r\n imageSearchType: OtherReportImageSearchType;\r\n}\r\n","import { OtherReportListItem, OtherReportSearchType, OtherReportImageSearchType } from '../../../pages/Report/OtherReport/_types';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\nimport { OtherReportItem, OtherReportSearchType as DtoSearchType, MachineType as DtoMachineType } from '../../swagger-clients';\r\n\r\n/**\r\n * `その他報告` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class OtherReportUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: OtherReportItem[]): OtherReportListItem[] {\r\n const result: OtherReportListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n const dateAt = source.reportAt == null ? \"\" : SharedUtility.toDateTimeString(new Date(source.reportAt));\r\n const item: OtherReportListItem = {\r\n no: source.reportNo ?? \"\",\r\n reportAt: dateAt,\r\n reporter: source.reporter ?? \"\",\r\n site: source.site ?? \"\",\r\n item: source.reportItem ?? \"\",\r\n area: SharedUtility.toAreaText(source.areaId),\r\n areaType: SharedUtility.toAreaType(source.areaId),\r\n imagePaths: source.imageFilePath ?? [],\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 検索キーワード種別を変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSearchType(source: OtherReportSearchType): DtoSearchType {\r\n const result: DtoSearchType | undefined =\r\n source === OtherReportSearchType.None ? DtoSearchType.None :\r\n source === OtherReportSearchType.Reporter ? DtoSearchType.Reporter :\r\n source === OtherReportSearchType.Report ? DtoSearchType.Report :\r\n void 0;\r\n if (result == null) {\r\n throw new Error(\"toSearchType\");\r\n }\r\n return result;\r\n }\r\n\r\n\r\n public static toIsSavedImage(source: OtherReportImageSearchType): boolean | undefined {\r\n const result: boolean | undefined =\r\n source === OtherReportImageSearchType.With ? true :\r\n source === OtherReportImageSearchType.Without ? false :\r\n void 0;\r\n\r\n return result;\r\n\r\n\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { OtherReportClient, GetOtherReportInput, GetDocumentInput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { OtherReportGetRequest, OtherReportGetResult, OtherReportGetDocumentRequest, OtherReportGetDocumentResult } from './types';\r\nimport { OtherReportUtility } from './other-report-utility';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `その他報告` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class OtherReportAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new OtherReportAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: OtherReportGetRequest): Promise {\r\n function createErrorResult(message?: string): OtherReportGetResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetOtherReportInput();\r\n input.init({\r\n searchWord: parameter.item.keyword,\r\n searchType: OtherReportUtility.toSearchType(parameter.item.searchType),\r\n searchBeginAt: parameter.item.beginAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.beginAt),\r\n searchEndAt: parameter.item.endAt == null ? void 0 : SharedUtility.toFormatDateString(parameter.item.endAt),\r\n isSavedImage: OtherReportUtility.toIsSavedImage(parameter.item.imageSearchType),\r\n });\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return createErrorResult(output.errorMessage);\r\n }\r\n // 正常\r\n const result: OtherReportGetResult = {\r\n isError: false,\r\n items: OtherReportUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ドキュメントの取得を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getLinkAsync(parameter: OtherReportGetDocumentRequest): Promise {\r\n function createErrorResult(message?: string): OtherReportGetDocumentResult {\r\n return {\r\n url: \"\",\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n // 取得\r\n const input = new GetDocumentInput();\r\n input.init({\r\n no: parameter.no,\r\n });\r\n // memo kura: 実装 -> 関数不使用\r\n //const output = await this.client.getDocument(name);\r\n //if (output == null) {\r\n // return createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n //}\r\n //else if (output.isError === true) {\r\n // return createErrorResult(output.errorMessage);\r\n //}\r\n\r\n // 正常\r\n const result: OtherReportGetDocumentResult = {\r\n isError: false,\r\n url: \"\", //output.url ?? \"\",\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new OtherReportClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n// shared\r\nimport { ExtendGenericState, createExtendGenericSlice } from '../shared/create-extend-generic-slice';\r\n// type\r\nimport { OtherReportAdapter } from '../../adapter/other-report/other-report-adapter';\r\nimport { OtherReportGetDocumentRequest, OtherReportGetDocumentResult, OtherReportGetRequest, OtherReportGetResult } from '../../adapter/other-report/types';\r\nimport { OtherReportListItem } from '../../../pages/Report/OtherReport/_types';\r\n\r\n/** その他報告 アイテム情報の State を表します。 */\r\ninterface OtherReportItemState {\r\n /** 選択された項目を表します。 */\r\n selectedRowItem?: OtherReportListItem,\r\n /** 詳細画面ダイアログが表示されているかどうかを表します。 */\r\n isOpenDialog: boolean,\r\n}\r\n\r\n/** その他報告 State を提供します。 */\r\ninterface OtherRportSliceState {\r\n /** 一覧取得結果情報を表します。 */\r\n getResult?: OtherReportGetResult,\r\n /** ドキュメント取得結果情報を表します。 */\r\n getDocumentResult?: OtherReportGetDocumentResult,\r\n}\r\n\r\n// State の初期値を設定します。\r\nconst initialState: ExtendGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n getResult: {\r\n items: [],\r\n isError: false,\r\n },\r\n getDocumentResult: {\r\n url: \"\",\r\n isError: false,\r\n }\r\n },\r\n item: {\r\n isOpenDialog: false,\r\n }\r\n}\r\n\r\n/** その他報告 Slice を 提供します。*/\r\nexport const OtherReportSlice = createExtendGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'OtherReport',\r\n initialState: initialState,\r\n reducers: {\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchEndExtension(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n\r\n if (action.payload.getResult) {\r\n state.result.getResult = action.payload.getResult;\r\n }\r\n if (action.payload.getDocumentResult) {\r\n state.result.getDocumentResult = action.payload.getDocumentResult;\r\n }\r\n },\r\n /**\r\n * ダイアログの閉じる処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n closeDialog(state: ExtendGenericState) {\r\n state.item.isOpenDialog = false;\r\n },\r\n\r\n /**\r\n * レポートボタンクリック処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n onReportClick(state: ExtendGenericState, action: PayloadAction) {\r\n state.item.isOpenDialog = true;\r\n state.item.selectedRowItem = action.payload;\r\n }\r\n\r\n },\r\n})\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetAsync = (parameter: OtherReportGetRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(OtherReportSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await OtherReportAdapter.instance.getAsync(parameter);\r\n\r\n // 通信終了\r\n dispatch(OtherReportSlice.actions.fetchEndExtension({ getResult: result }));\r\n\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(OtherReportSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(OtherReportSlice.actions.showSuccessMessage());\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(OtherReportSlice.actions.fetchEndExtension({\r\n getResult: {\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }\r\n }));\r\n\r\n // メッセージ\r\n dispatch(OtherReportSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(OtherReportSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * ドキュメント取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetLinkAsync = (parameter: OtherReportGetDocumentRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(OtherReportSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await OtherReportAdapter.instance.getLinkAsync(parameter);\r\n\r\n // 通信終了\r\n dispatch(OtherReportSlice.actions.fetchEndExtension({ getDocumentResult: result }));\r\n\r\n if (result.isError) {\r\n // 異常\r\n // メッセージ\r\n dispatch(OtherReportSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(OtherReportSlice.actions.showSuccessMessage());\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(OtherReportSlice.actions.fetchEndExtension({\r\n getDocumentResult: {\r\n url: \"\",\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }\r\n }));\r\n\r\n // メッセージ\r\n dispatch(OtherReportSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(OtherReportSlice.actions.fetchEnd());\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport MaterialTable, { MTableBodyRow, Column } from 'material-table';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport indigo from '@material-ui/core/colors/indigo';\r\nimport Box from '@material-ui/core/Box';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\n// type\r\nimport { OtherReportListItem } from '../../_types'\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // テーブルソートヘッダー\r\n sortHeader: {\r\n // ソートされているカラム ヘッダー\r\n \"& .MuiTableSortLabel-active\": {\r\n color: theme.palette.text.primary,\r\n },\r\n // ソートアイコンカラー\r\n \"& .MuiTableSortLabel-active .MuiTableSortLabel-icon\": {\r\n color: `${theme.palette.text.primary}!important` as any,\r\n },\r\n // material-table スクロールバーをデフォルトに上書き\r\n \"& > div > div > div > div\": {\r\n overflowY: \"visible !important\",\r\n },\r\n },\r\n // 帳票アイコンボタン\r\n icon: {\r\n color: theme.palette.text.secondary\r\n }\r\n\r\n })\r\n);\r\n\r\n/** その他報告のテーブルの Props を提供します。 */\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: OtherReportListItem[],\r\n /** モーダル表示イベントを表します。 */\r\n onClickShowModal: (rowData: OtherReportListItem) => void,\r\n}\r\n\r\n/** その他報告のテーブルの State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/** その他報告テーブルのカラムを表します。 */\r\nconst columnData: Column[] = [\r\n {\r\n title: \"報告管理 No.\",\r\n field: \"no\"\r\n },\r\n {\r\n title: \"報告日時\",\r\n field: \"reportAt\"\r\n },\r\n {\r\n title: \"報告者\",\r\n field: \"reporter\"\r\n },\r\n {\r\n title: \"所属\",\r\n field: \"area\"\r\n },\r\n {\r\n title: \"作業場所\",\r\n field: \"site\"\r\n },\r\n {\r\n title: \"報告事項\",\r\n field: \"report\",\r\n cellStyle: {\r\n width: 500,\r\n maxWidth: 500,\r\n },\r\n render: (rowData: OtherReportListItem) => (\r\n \r\n <>{rowData.item}\r\n \r\n ),\r\n },\r\n]\r\n\r\n/**\r\n * その他報告画面テーブルを表示します。\r\n * @param props\r\n */\r\nconst OtherReportTable: React.FC = (props) => {\r\n\r\n // 内部 Render の MTableBodyRowで使用する為、一度取り直す\r\n const onClickShowModal = props.onClickShowModal;\r\n\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** カラム情報を提供します。 */\r\n const [values, setValues] = useState({\r\n columns: columnData,\r\n });\r\n\r\n /**\r\n * ソート変更時のイベント処理を行います。\r\n * @param orderBy\r\n * @param orderDirection\r\n */\r\n const onOrderChange = (orderBy: number, orderDirection: \"asc\" | \"desc\"): void => {\r\n\r\n // 再レンダーされる時にソート順がリセットされないようにState で保持する\r\n setValues({\r\n columns: values.columns.map((column, index) => {\r\n if (index === orderBy) {\r\n column.defaultSort = orderDirection;\r\n } else {\r\n delete column.defaultSort\r\n }\r\n return column;\r\n })\r\n })\r\n };\r\n\r\n return (\r\n \r\n\r\n ,\r\n tooltip: \"\",\r\n onClick: (event, rowData) => Array.isArray(rowData) ? void 0 : onClickShowModal(rowData)\r\n }\r\n ]}\r\n components={{\r\n Row: (props) => {\r\n return (\r\n onClickShowModal(props.data)}\r\n {...props}\r\n />\r\n )\r\n }\r\n }}\r\n onOrderChange={onOrderChange}\r\n />\r\n\r\n \r\n )\r\n}\r\nexport default OtherReportTable;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { OtherReportSlice, onGetAsync } from '../../../../../modules/slice/other-report/other-report-slice';\r\n// type\r\nimport { OtherReportListItem } from '../../_types';\r\nimport { AreaType } from '../../../../../_types';\r\nimport OtherReportTable from './OtherReportTable';\r\n\r\n/**\r\n * その他報告画面テーブルを表示します。\r\n * @param props\r\n */\r\nexport const OtherReportTableContainer: React.FC<{}> = (props) => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: OtherReportListItem[] = useSelector((state: RootState) => state.otherReport.result.getResult?.items ?? []);\r\n const areaType: AreaType = useSelector((state: RootState) => state.areaType.area);\r\n\r\n /**\r\n * モーダル表示時のイベント処理を行います。\r\n * @param record\r\n */\r\n const onClickShowModal = (record: OtherReportListItem) => {\r\n dispatch(OtherReportSlice.actions.onReportClick(record));\r\n }\r\n\r\n /**\r\n * エリア種別のフィルター処理を行います。\r\n * @param source テーブルデータを指定します。\r\n * @param areaType エリア種別を指定します。\r\n * @returns フィルタ後のテーブルデータを返します。\r\n */\r\n const areaTypeFilter = (source: OtherReportListItem[], areaType: AreaType) => {\r\n\r\n // エリアが確定していない施工機は全国でしか表示しない。\r\n // material-tableにデータをそのまま渡すとErrorになるので複製・参照を切る\r\n return source.filter(item => (areaType === AreaType.None ? true : item.areaType === areaType)).map(item => ({ ...item }));\r\n\r\n }\r\n\r\n return (\r\n \r\n\r\n )\r\n}\r\n","// react\r\nimport { useState } from 'react';\r\nimport * as React from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n TextField,\r\n FormControlLabel,\r\n Box,\r\n RadioGroup,\r\n Radio,\r\n FormControl,\r\n} from '@material-ui/core';\r\n// component\r\nimport { OtherReportInputItem, OtherReportSearchType, OtherReportImageSearchType } from '../../_types'\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタン\r\n radioGroup: {\r\n display: \"inline-flex\",\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n marginTop: theme.spacing(2),\r\n },\r\n // 日付の間の '~'\r\n toFrom: {\r\n display: \"flex\",\r\n writingMode: \"vertical-lr\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n // グループ化 枠\r\n groupContainer: {\r\n position: \"relative\",\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderStyle: \"solid\",\r\n borderRadius: 4,\r\n borderColor: theme.palette.text.disabled,\r\n borderWidth: 1,\r\n\r\n },\r\n // グループ化 タイトル\r\n groupTitle: {\r\n position: \"absolute\",\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n top: \"-12px\",\r\n left: \"-8px\",\r\n fontWeight: \"bold\",\r\n backgroundColor: theme.palette.background.paper,\r\n }\r\n\r\n }),\r\n);\r\n\r\n/** その他報告画面 検索エリアのPropsを表示します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を表します。 */\r\n onSearchClick: (event: React.MouseEvent, inputItem: OtherReportInputItem) => void\r\n}\r\n\r\n/**\r\n * Stateの初期値を設定します\r\n * */\r\nconst initState = (): OtherReportInputItem => {\r\n\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n const result: OtherReportInputItem = {\r\n keyword: \"\",\r\n searchType: OtherReportSearchType.Report,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n imageSearchType: OtherReportImageSearchType.None,\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** その他報告画面 検索エリアを表示します。 */\r\nconst OtherReportSearch: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: OtherReportSearchType.Reporter, label: \"報告者\" },\r\n { key: OtherReportSearchType.Report, label: \"報告事項\" },\r\n ];\r\n\r\n const imageTypeRadioButton = [\r\n { key: OtherReportImageSearchType.None, label: \"未指定\" },\r\n { key: OtherReportImageSearchType.With, label: \"画像あり\" },\r\n { key: OtherReportImageSearchType.Without, label: \"画像なし\" },\r\n ]\r\n\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力項目を提供します。*/\r\n const [values, setValues] = useState(initState());\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof OtherReportInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * 開始日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeBeginAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compEndAt = values?.endAt?.getTime() ?? 0\r\n const compBeginAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: newValue,\r\n endAt: (compBeginAt > compEndAt) ? null : values.endAt, // 入力済の終了日より後の場合は、終了日を null に設定\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 終了日の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeEndAt = (newValue: Date | null) => {\r\n // 時間を ゼロ(00:00:000) に変換\r\n if (newValue != null) newValue.setHours(0, 0, 0, 0);\r\n\r\n const compBeginAt = values?.beginAt?.getTime() ?? 0\r\n const compEndAt = newValue?.getTime() ?? 0\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n beginAt: (compEndAt !== 0 && compBeginAt > compEndAt) ? null : values.beginAt, // 入力済みの開始日より前の場合は、開始日を null に設定\r\n endAt: newValue,\r\n }\r\n ))\r\n };\r\n\r\n return (\r\n <>\r\n \r\n\r\n
\r\n \r\n 検索範囲\r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n
\r\n\r\n \r\n 日付\r\n \r\n\r\n {/* 開始日 */}\r\n onChangeBeginAt(data)}\r\n />\r\n\r\n
\r\n\r\n {/* 終了日 */}\r\n onChangeEndAt(data)}\r\n />\r\n\r\n \r\n 画像\r\n \r\n\r\n \r\n\r\n {imageTypeRadioButton.map((value) => (\r\n }\r\n label={value.label.toString()}\r\n />\r\n ))}\r\n\r\n \r\n\r\n\r\n {/* 検索ボタン */}\r\n props.onSearchClick(event, values)}\r\n />\r\n
\r\n \r\n );\r\n\r\n\r\n};\r\n\r\nexport default OtherReportSearch;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch } from 'react-redux';\r\nimport { onGetAsync } from '../../../../../modules/slice/other-report/other-report-slice';\r\n// component\r\nimport { OtherReportInputItem } from '../../_types';\r\nimport OtherReportSearch from './OtherReportSearch';\r\n\r\n/** その他報告画面 検索エリアを表示します。 */\r\nexport const OtherReportSearchContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onSearchClickAsync = async (event: React.MouseEvent, inputItem: OtherReportInputItem) => {\r\n // 一覧取得\r\n await dispatch(onGetAsync({ item: inputItem }));\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// react-image-gallery\r\nimport ImageGallery, { ReactImageGalleryItem } from 'react-image-gallery';\r\nimport \"react-image-gallery/styles/css/image-gallery.css\";\r\nimport \"./style.css\";\r\n\r\n\r\n/** その他報告画像一覧の Props を提供します。*/\r\ninterface Props {\r\n /** 画像のパス一覧を表します。 */\r\n imagePaths: string[],\r\n}\r\n\r\n/**\r\n * その他報告画像一覧を表示します。\r\n * */\r\nexport const ReportImageGallery = (props: Props) => {\r\n\r\n /**\r\n * 画像表示用データに変換します。\r\n * @param imagePaths\r\n */\r\n const ConvertToReactImageGalleryItem = (imagePaths: string[]) => {\r\n\r\n const result = imagePaths.map((path) => {\r\n return {\r\n original: path,\r\n thumbnail: path,\r\n }\r\n })\r\n return result;\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default ReportImageGallery\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n Typography,\r\n Grid,\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n IconButton,\r\n Button,\r\n} from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\n// type\r\nimport { OtherReportListItem } from '../../_types';\r\n// component\r\nimport { ReportImageGallery } from \"../ReportImageGallery/ReportImageGallery\";\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ヘッダー\r\n header: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText\r\n },\r\n // タイトル\r\n title: {\r\n margin: 0,\r\n padding: theme.spacing(2),\r\n },\r\n // 閉じるボタンアイコン\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n },\r\n // 項目名\r\n itemColumn: {\r\n width: 150,\r\n },\r\n // ダウンロードボタン\r\n button: {\r\n marginBottom: theme.spacing(1),\r\n }\r\n }),\r\n);\r\n\r\n/** その他報告詳細ダイアログの Props を提供します。*/\r\ninterface Props {\r\n /** 報告内容を表します。 */\r\n selectedRowItem: OtherReportListItem | null;\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** 閉じる処理を表します。 */\r\n handleClose: () => void;\r\n /** ダウンロード処理を表します。 */\r\n onDwonloadClick: () => void;\r\n}\r\n\r\n\r\n/**\r\n * その他報告詳細ダイアログを表示します。\r\n * @param props\r\n */\r\nconst ReportDetailDialog: React.FC = (props: Props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n }, [props.isOpen])\r\n\r\n\r\n return (\r\n \r\n {/* タイトル*/}\r\n \r\n 報告管理 No. {props.selectedRowItem?.no}\r\n \r\n \r\n \r\n \r\n\r\n {/* コンテンツ */}\r\n \r\n\r\n {/* 日時 */}\r\n \r\n \r\n \r\n 日時\r\n \r\n \r\n \r\n \r\n {props.selectedRowItem?.reportAt}\r\n \r\n \r\n \r\n\r\n {/* 報告者 */}\r\n \r\n \r\n \r\n 報告者\r\n \r\n \r\n \r\n \r\n {props.selectedRowItem?.reporter}\r\n \r\n \r\n \r\n\r\n {/* 所属 */}\r\n \r\n \r\n \r\n 所属\r\n \r\n \r\n \r\n \r\n {props.selectedRowItem?.area}\r\n \r\n \r\n \r\n\r\n {/* 作業場所 */}\r\n \r\n \r\n \r\n 作業場所\r\n \r\n \r\n \r\n \r\n {props.selectedRowItem?.site}\r\n \r\n \r\n \r\n\r\n {/* 報告事項 */}\r\n \r\n \r\n \r\n 報告事項\r\n \r\n \r\n \r\n \r\n {/* 改行を含む */}\r\n {props.selectedRowItem?.item && props.selectedRowItem.item.split(\"\\n\").map((text, index) => {\r\n return
{text}
\r\n })}\r\n
\r\n
\r\n
\r\n\r\n {/* 画像 */}\r\n \r\n \r\n \r\n 添付画像\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n {props.selectedRowItem?.imagePaths.length\r\n ? (\r\n <>\r\n }\r\n onClick={props.onDwonloadClick}\r\n className={classes.button}\r\n >\r\n 画像ダウンロード\r\n \r\n \r\n \r\n )\r\n : (\r\n\r\n \r\n 添付画像なし\r\n \r\n\r\n )\r\n }\r\n \r\n \r\n\r\n
\r\n\r\n \r\n );\r\n}\r\nexport default ReportDetailDialog;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { OtherReportSlice, onGetAsync } from '../../../../../modules/slice/other-report/other-report-slice';\r\nimport ReportDetailDialog from './ReportDetailDialog';\r\nimport * as iconv from \"iconv-lite\";\r\n// import * as JSZip from 'jszip';\r\nconst JSZip = require('jszip');\r\n\r\n/** 画像データのインターフェースを提供します。 */\r\ninterface ImageData {\r\n /** 画像を表します。 */\r\n imgBlob: Blob | null,\r\n /** ファイル名を表します。 */\r\n fileName: string,\r\n\r\n}\r\n\r\n/**\r\n * その他報告詳細ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ReportDetailDialogContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const selectedRowItem = useSelector((state: RootState) => state.otherReport.item.selectedRowItem);\r\n const isOpenDialog = useSelector((state: RootState) => state.otherReport.item.isOpenDialog);\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n dispatch(OtherReportSlice.actions.closeDialog());\r\n };\r\n\r\n /* 画像ダウンロード処理を行います。*/\r\n const onDownloadClick = async () => {\r\n // null チェック\r\n if (selectedRowItem == null) {\r\n dispatch(OtherReportSlice.actions.showErrorMessage(\"その他報告データが指定されていません\"));\r\n return;\r\n\r\n } else if (!selectedRowItem.no) {\r\n dispatch(OtherReportSlice.actions.showErrorMessage(\"報告書No.が指定されていません\"));\r\n return;\r\n\r\n } else if (!selectedRowItem.imagePaths.length) {\r\n dispatch(OtherReportSlice.actions.showErrorMessage(\"画像パスが指定されていません\"));\r\n return;\r\n\r\n } else {\r\n // ダウンロード\r\n await downloadImagesAsync(selectedRowItem.imagePaths, selectedRowItem.no)\r\n }\r\n\r\n };\r\n\r\n /**\r\n * 画像ファイルを取得します。\r\n * @param source\r\n */\r\n async function getImageDataAsync(source: string[]) {\r\n // JSZip に追加するために非同期リクエストを Promise で wrap\r\n const imagePromises = source.map((src, i) => new Promise((resolve, reject) => {\r\n\r\n fetch(src, {\r\n method: \"GET\",\r\n })\r\n .then(response => response.blob())\r\n .then((response) => {\r\n // ファイル名とデータ返却\r\n console.log({ response });\r\n const fileName = src.slice(src.lastIndexOf(\"/\") + 1);\r\n resolve({ imgBlob: response, fileName: fileName });\r\n })\r\n .catch((e) => {\r\n // reject だと await Promise.all を抜けてしまう\r\n // => resolve でデータ無し\r\n console.log({ e });\r\n resolve({ imgBlob: null, fileName: \"\" });\r\n })\r\n }));\r\n\r\n // すべての画像を取得\r\n const result = await Promise.all(imagePromises);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 画像をダウンロードします。\r\n * @param source\r\n * @param folderName\r\n */\r\n async function downloadImagesAsync(source: string[], folderName: string) {\r\n\r\n // 画像を取得\r\n const items = await getImageDataAsync(source);\r\n\r\n let nullData: ImageData[] = [];\r\n let imageData: ImageData[] = [];\r\n\r\n items.forEach(item => {\r\n item.imgBlob == null ? nullData.push(item) : imageData.push(item);\r\n });\r\n\r\n if (!imageData.length) {\r\n dispatch(OtherReportSlice.actions.showErrorMessage(\"画像ファイルを取得できませんでした\"));\r\n return;\r\n } else if (nullData.length) {\r\n dispatch(OtherReportSlice.actions.showErrorMessage(\"取得に失敗した画像ファイルがあります\"));\r\n }\r\n\r\n // Zip ファイル生成&ダウンロード\r\n generateImagesZipAsync(imageData, folderName);\r\n }\r\n\r\n /**\r\n * Zip ファイルをで画像をダウンロードします。\r\n * @param images\r\n * @param folderName\r\n */\r\n async function generateImagesZipAsync(images: ImageData[], folderName: string) {\r\n const zip = new JSZip();\r\n\r\n // フォルダ下に画像を格納\r\n images.forEach(image => {\r\n if (image.imgBlob && image.fileName) {\r\n zip.file(image.fileName, image.imgBlob)\r\n }\r\n });\r\n\r\n // zip を生成\r\n await zip.generateAsync(\r\n {\r\n type: \"blob\",\r\n encodeFileName: function (fileName: string) { return iconv.encode(fileName, \"CP932\") },\r\n compression: \"DEFLATE\",\r\n compressionOptions: { level: 9 },\r\n\r\n }\r\n )\r\n .then((blob: Blob) => {\r\n\r\n // ダウンロードリンクを 生成\r\n const dlLink = document.createElement(\"a\");\r\n\r\n // blob から URL を生成\r\n const dataUrl = URL.createObjectURL(blob);\r\n dlLink.href = dataUrl;\r\n dlLink.download = `${folderName}.zip`;\r\n\r\n // 設置/クリック/削除\r\n document.body.insertAdjacentElement(\"beforeend\", dlLink);\r\n dlLink.click();\r\n dlLink.remove();\r\n\r\n // オブジェクト URL の開放\r\n setTimeout(function () {\r\n window.URL.revokeObjectURL(dataUrl);\r\n }, 1000);\r\n });\r\n }\r\n\r\n\r\n\r\n return (\r\n <>\r\n {/* モーダル表示 */}\r\n {selectedRowItem && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeReportPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { OtherReportSlice, onGetAsync } from '../../../modules/slice/other-report/other-report-slice';\r\n// 共通component\r\nimport { AreaToggleButtonContainer } from '../../../components/AreaToggleButton/AreaToggleButtonContainer';\r\nimport TopAndBottomLayout from '../../../components/Layout/TopAndBottomLayout';\r\nimport TwoColumnLayout from '../../../components/Layout/TwoColumnLayout';\r\nimport SinglePageLayout from '../../../components/Layout/SinglePageLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\n// component\r\nimport { OtherReportTableContainer } from './conponents/TableContent/OtherReportTableContainer';\r\nimport { OtherReportSearchContainer } from './conponents/SearchContent/OtherReportSearchContainer';\r\nimport { ReportDetailDialogContainer } from './conponents/ReportDetailDialog/ReportDetailDialogContainer';\r\nimport { OtherReportListItem, OtherReportInputItem, OtherReportSearchType, OtherReportImageSearchType } from './_types';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n\r\n/** その他報告画面 を表示します。*/\r\nexport const OtherReportPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.otherReport.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.otherReport.isShowMessage);\r\n const message = useSelector((state: RootState) => state.otherReport.message);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(OtherReportSlice.actions.hideMessage());\r\n };\r\n\r\n // Mount, Unmount時\r\n useEffect(() => {\r\n dispatch(changeReportPageHeader(AppTitle.otherReport.title));\r\n\r\n // 初回マウント時に直近30日分のデータ取得を行う。\r\n /** 初期表示時に入力値に入れる値は SearchContent で設定しているので注意する */\r\n const beginAt = new Date();\r\n beginAt.setMonth(beginAt.getMonth() - 1);\r\n beginAt.setHours(0, 0, 0, 0);\r\n\r\n const endAt = new Date();\r\n endAt.setHours(0, 0, 0, 0);\r\n\r\n dispatch(onGetAsync({\r\n item: {\r\n keyword: \"\",\r\n searchType: OtherReportSearchType.None,\r\n beginAt: beginAt,\r\n endAt: endAt,\r\n imageSearchType: OtherReportImageSearchType.None,\r\n }\r\n }))\r\n\r\n }, [dispatch]);\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* その他報告 */}\r\n \r\n }\r\n bottomContent={}\r\n />\r\n }\r\n // 検査結果\r\n main={}\r\n />\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n \r\n\r\n )\r\n};\r\n","import * as React from 'react';\r\nimport { OtherReportPage } from './OtherReport';\r\nimport { HeaderPage } from '../Shared/HeaderPage/HeaderPage';\r\n\r\n/**\r\n * その他報告(Report)画面を表します。\r\n */\r\nexport const ReportPage: React.FC<{}> = () => {\r\n return (\r\n } />\r\n );\r\n};\r\n","// redux\r\nimport { createSlice, SliceCaseReducers, ValidateSliceCaseReducers, PayloadAction } from '@reduxjs/toolkit';\r\n// component\r\nimport { Message } from '../../../components/MuiSnackbar/types';\r\nimport { CreateSliceUtility } from './create-slice-utility'\r\nimport { KeyValueItem } from '../../../_types';\r\n\r\n/** ジェネリック型 State のインターフェースを提供します。 */\r\nexport interface MasterGenericState {\r\n /** 結果情報を表します。*/\r\n result: T,\r\n /** 行が選択された状態かどうかを表します。*/\r\n isSelected: boolean,\r\n /** アイテム情報を表します。*/\r\n selectedRowItem?: U,\r\n /** リストアイテム情報を表します。*/\r\n selectBoxItem: V\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** ロード中かどうかを表します。*/\r\n isLoading: boolean,\r\n /** メッセージを表示するかどうかを表します。*/\r\n isShowMessage: boolean,\r\n /** メッセージを表します。*/\r\n message?: Message,\r\n /** ダイアログ表示状態かどうかを表します。 */\r\n isDialogOpen: boolean,\r\n /** ユーザー情報が更新されたかどうかを表します。 */\r\n isUpdated?: boolean,\r\n /** 帳票プレビューURLを表します。 */\r\n reportUrl?: string,\r\n /** 帳票を読み込み中かどうかを表します。 */\r\n isReportLoading?: boolean,\r\n}\r\n\r\n/**\r\n * slice オブジェクトを作成します。\r\n * @param name A string name for this slice of state. Generated action type constants will use this as a prefix.\r\n * @param initialState The initial state value for this slice of state.\r\n * @param reducers An object containing Redux \"case reducer\" functions (functions intended to handle a specific action type, equivalent to a single case statement in a switch).\r\n */\r\nexport const createMasterGenericSlice = >>\r\n ({\r\n name = '',\r\n initialState,\r\n reducers\r\n }: {\r\n name: string\r\n initialState: MasterGenericState\r\n reducers: ValidateSliceCaseReducers, Reducers>\r\n }) => {\r\n return createSlice({\r\n name,\r\n initialState,\r\n reducers: {\r\n\r\n /**\r\n * Stateのリセットを行います。\r\n * @param state\r\n */\r\n resetState(state: MasterGenericState) {\r\n\r\n return { ...initialState }\r\n },\r\n\r\n /**\r\n * 通信開始処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchStart(state) {\r\n state.isLoading = true;\r\n state.isShowMessage = false;\r\n state.message = void 0;\r\n },\r\n\r\n /**\r\n * If you want to write to values of the state that depend on the generic\r\n * (in this case: `state.data`, which is T), you might need to specify the\r\n * State type manually here, as it defaults to `Draft>`,\r\n * which can sometimes be problematic with yet-unresolved generics.\r\n * This is a general problem when working with immer's Draft type and generics.\r\n */\r\n /**\r\n * 通信成功時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchSuccess(state: MasterGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.result = action.payload;\r\n },\r\n\r\n /**\r\n * 通信失敗処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchFailure(state: MasterGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n state.isSelected = false;\r\n state.selectedRowItem = void 0;\r\n state.result = action.payload;\r\n },\r\n\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n */\r\n fetchEnd(state) {\r\n state.isLoading = false;\r\n },\r\n\r\n /**\r\n * メッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = action.payload;\r\n },\r\n\r\n /**\r\n * 通信成功時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showSuccessMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"success\",\r\n text: action.payload ?? CreateSliceUtility.DefualtSuccessMessage,\r\n }\r\n },\r\n\r\n /**\r\n * 通信失敗時のメッセージの表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n showErrorMessage(state, action: PayloadAction) {\r\n state.isShowMessage = true;\r\n state.message = {\r\n type: \"error\",\r\n text: `Error : ${action.payload ?? CreateSliceUtility.DefualtErrorMessage}`,\r\n }\r\n },\r\n\r\n /**\r\n * メッセージの非表示処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n hideMessage(state) {\r\n state.isShowMessage = false;\r\n },\r\n\r\n /**\r\n * 選択された行データの更新を行います。\r\n * @param state\r\n * @param action\r\n */\r\n onSelectedItem(state: MasterGenericState, action: PayloadAction) {\r\n state.isSelected = true;\r\n state.selectedRowItem = action.payload;\r\n\r\n },\r\n\r\n /**\r\n * 選択された行データの更新を行います。\r\n * @param state\r\n * @param action\r\n */\r\n clearSelectedItem(state: MasterGenericState) {\r\n state.isSelected = false;\r\n state.selectedRowItem = void 0;\r\n },\r\n\r\n\r\n /**\r\n * 新規作成状態を変更します\r\n * @param state\r\n * @param action\r\n */\r\n chageCreating(state, action: PayloadAction) {\r\n state.isCreating = action.payload\r\n state.isSelected = false;\r\n state.selectedRowItem = void 0;\r\n },\r\n\r\n /**\r\n * セレクトボックスを更新します。\r\n * @param state\r\n * @param action\r\n */\r\n getSelectBoxItem(state: MasterGenericState, action: PayloadAction) {\r\n state.selectBoxItem = action.payload\r\n },\r\n\r\n /**\r\n * ダイアログの開閉状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n toggleDialog(state, action: PayloadAction) {\r\n state.isDialogOpen = action.payload;\r\n },\r\n\r\n /**\r\n * 帳票プレビュー情報を更新します。\r\n * @param state\r\n * @param action\r\n */\r\n updatePreviewReport(state: MasterGenericState, action: PayloadAction) {\r\n state.reportUrl = action.payload;\r\n },\r\n\r\n /**\r\n * 帳票ビューワの読み込み完了フラグを切り替えます。\r\n * @param state\r\n * @param action\r\n */\r\n changeReportLoadingFlag(state: MasterGenericState, action: PayloadAction) {\r\n state.isReportLoading = action.payload;\r\n },\r\n ...reducers\r\n }\r\n })\r\n}\r\n","import { MaintenanceItemListItem, MaintenanceItemInputItem } from '../../../pages/Master/MaintenanceItem/_types';\r\nimport { MaintenanceItemRequest, MaintenanceItemMasterSelectBoxItemState } from './types';\r\nimport { MaintenanceItemInput, MaintenanceItemItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `整備項目マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MaintenanceItemUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(\r\n selectBoxItem: MaintenanceItemMasterSelectBoxItemState,\r\n items?: MaintenanceItemItem[]\r\n ): MaintenanceItemListItem[] {\r\n const result: MaintenanceItemListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null\r\n || source.machineTypeId == null\r\n || source.divisionId == null\r\n || source.weight == null\r\n || source.lockVersion == null) {\r\n continue;\r\n }\r\n\r\n // セレクトボックスの名称を取得\r\n const machineTypeItem = selectBoxItem.MachineType.find(_ => _.key === source.machineTypeId);\r\n const divisionList = selectBoxItem.MaintenanceDivision.find(_ => _.key === source.machineTypeId);\r\n const divisionItem = divisionList?.value.find(_ => _.key === source.divisionId) ?? void 0;\r\n\r\n const item: MaintenanceItemListItem = {\r\n id: source.id,\r\n name: source.name ?? \"\",\r\n maintenanceDivisionId: source.divisionId,\r\n maintenanceDivisionName: divisionItem?.value ?? \"\",\r\n machineTypeId: source.machineTypeId,\r\n machineTypeName: machineTypeItem?.value ?? \"\",\r\n unit: source.unit ?? \"\",\r\n lockVersion: source.lockVersion,\r\n weight: source.weight,\r\n inputLowerLimit: source.inputLowerLimit ?? \"\",\r\n inputHigherLimit: source.inputHigherLimit ?? \"\",\r\n lightAlarmLowerLimit: source.lightAlarmLowerLimit ?? \"\",\r\n lightAlarmHigherLimit: source.lightAlarmHigherLimit ?? \"\",\r\n heavyAlarmLowerLimit: source.heavyAlarmLowerLimit ?? \"\",\r\n heavyAlarmHigherLimit: source.heavyAlarmHigherLimit ?? \"\",\r\n remarks: source.remarks ?? \"\",\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: MaintenanceItemRequest): MaintenanceItemInput {\r\n const result = new MaintenanceItemInput();\r\n result.init({\r\n item: MaintenanceItemUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: MaintenanceItemInputItem): MaintenanceItemItem {\r\n const result = new MaintenanceItemItem();\r\n result.init({\r\n id: source.id,\r\n divisionId: source.maintenanceDivisionId,\r\n machineTypeId: source.machineTypeId,\r\n name: source.name,\r\n weight: source.weight,\r\n unit: source.unit,\r\n inputLowerLimit: source.inputLowerLimit == null ? void 0 : source.inputLowerLimit.toString(),\r\n inputHigherLimit: source.inputHigherLimit == null ? void 0 : source.inputHigherLimit.toString(),\r\n lightAlarmLowerLimit: source.lightAlarmLowerLimit == null ? void 0 : source.lightAlarmLowerLimit.toString(),\r\n lightAlarmHigherLimit: source.lightAlarmHigherLimit == null ? void 0 : source.lightAlarmHigherLimit.toString(),\r\n heavyAlarmLowerLimit: source.heavyAlarmLowerLimit == null ? void 0 : source.heavyAlarmLowerLimit.toString(),\r\n heavyAlarmHigherLimit: source.heavyAlarmHigherLimit == null ? void 0 : source.heavyAlarmHigherLimit.toString(),\r\n remarks: source.remarks,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MaintenanceItemClient, MaintenanceItemInput, MaintenanceItemOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MaintenanceItemRequest, MaintenanceItemResult, MaintenanceItemMasterSelectBoxItemState } from './types';\r\nimport { MaintenanceItemUtility } from './maintenance-item-utility';\r\n\r\n/**\r\n * `整備項目マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MaintenanceItemAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MaintenanceItemAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): MaintenanceItemResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(\r\n parameter: MaintenanceItemRequest,\r\n selectBoxItem: MaintenanceItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new MaintenanceItemInput();\r\n input.init(MaintenanceItemUtility.toInput(parameter));\r\n\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceItemResult = {\r\n isError: false,\r\n items: MaintenanceItemUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(\r\n parameter: MaintenanceItemRequest,\r\n selectBoxItem: MaintenanceItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new MaintenanceItemInput();\r\n input.init(MaintenanceItemUtility.toInput(parameter));\r\n\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceItemResult = {\r\n isError: false,\r\n items: MaintenanceItemUtility.toListItem(selectBoxItem, output.items),\r\n\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(\r\n parameter: MaintenanceItemRequest,\r\n selectBoxItem: MaintenanceItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.maintenanceDivisionId == null ? \"整備区分 ID\"\r\n : parameter.item.machineTypeId == null ? \"施工機種別 ID\"\r\n : parameter.item.weight == null ? \"No\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MaintenanceItemInput();\r\n input.init(MaintenanceItemUtility.toInput(parameter));\r\n\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceItemResult = {\r\n isError: false,\r\n items: MaintenanceItemUtility.toListItem(selectBoxItem, output.items),\r\n\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(\r\n parameter: MaintenanceItemRequest,\r\n selectBoxItem: MaintenanceItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MaintenanceItemInput();\r\n input.init(MaintenanceItemUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceItemResult = {\r\n isError: false,\r\n items: MaintenanceItemUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MaintenanceItemClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { MaintenanceItemAdapter } from '../../adapter/maintenance-item/maintenance-item-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { MaintenanceItemRequest, MaintenanceItemResult, MaintenanceItemMasterSelectBoxItemState } from '../../adapter/maintenance-item/types';\r\nimport { MaintenanceItemListItem } from '../../../pages/Master/MaintenanceItem/_types';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\nimport { MachineType, KeyValueItem } from '../../../_types';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: {\r\n MachineType: [],\r\n MaintenanceDivision: [],\r\n },\r\n isDialogOpen: false,\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const MaintenanceItemMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'MaintenanceItem',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(MaintenanceItemMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(MaintenanceItemMasterSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchStart());\r\n\r\n // 施工機種別\r\n const machineTypeWaiter = SharedAdapter.instance.getMachineTypeAsync();\r\n // 整備項目\r\n const maintenanceDivisionWaiter = SharedAdapter.instance.getMaintenanceDivisionAsync();\r\n\r\n //まとめて取得\r\n const selectBoxresult = await Promise.all([machineTypeWaiter, maintenanceDivisionWaiter]) // 直接配列に渡したらエラーなる\r\n const machineTypeResult = selectBoxresult[0];\r\n const maintenanceDivisionResult = selectBoxresult[1];\r\n\r\n // 異常確認\r\n if (machineTypeResult.isError) {\r\n // 異常メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`施工機種別取得エラー:${machineTypeResult.errorMessage}`));\r\n\r\n } else if (maintenanceDivisionResult.isError) {\r\n // 異常メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`整備区分取得エラー:${maintenanceDivisionResult.errorMessage}`));\r\n\r\n } else {\r\n // 正常\r\n // リストの項目を store に保存\r\n dispatch(MaintenanceItemMasterSlice.actions.getSelectBoxItem({\r\n MachineType: machineTypeResult.items,\r\n MaintenanceDivision: maintenanceDivisionResult.items,\r\n }));\r\n\r\n // データ取得\r\n const result = await MaintenanceItemAdapter.instance.getAsync(\r\n { item: {} },\r\n {\r\n MachineType: machineTypeResult.items,\r\n MaintenanceDivision: maintenanceDivisionResult.items\r\n }\r\n );\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showSuccessMessage());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: MaintenanceItemRequest,\r\n selectBoxItem: MaintenanceItemMasterSelectBoxItemState,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await MaintenanceItemAdapter.instance.removeAsync(parameter, selectBoxItem);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(MaintenanceItemMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(MaintenanceItemMasterSlice.actions.clearSelectedItem());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 帳票プレビュー情報を取得します。\r\n * @param type 施工機種別を指定します。\r\n */\r\nexport const getMaintenancePreviewReportAsync = (type: MachineType) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchStart());\r\n dispatch(MaintenanceItemMasterSlice.actions.changeReportLoadingFlag(true));\r\n dispatch(MaintenanceItemMasterSlice.actions.updatePreviewReport(\"\"));\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.getMaintenancePreviewReport({ machineType: type });\r\n\r\n // 異常確認\r\n if (result.isError || !result.reportUrl) {\r\n // 異常メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`帳票プレビュー情報 取得エラー:${result.errorMessage}`));\r\n dispatch(MaintenanceItemMasterSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showSuccessMessage());\r\n\r\n dispatch(MaintenanceItemMasterSlice.actions.updatePreviewReport(result.reportUrl));\r\n }\r\n\r\n } catch (error) {\r\n // メッセージ\r\n dispatch(MaintenanceItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(MaintenanceItemMasterSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceItemMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n","import { Options } from 'material-table';\r\nimport { MuiTableOptions } from '../../../components/MuiTable';\r\nimport indigo from '@material-ui/core/colors/indigo';\r\n\r\n/** マスタ系の material-table のオプションを提供します。 */\r\nexport const MasterTableOptions: Options = {\r\n ...MuiTableOptions,\r\n headerStyle: {\r\n // ヘッダー 背景色\r\n backgroundColor: indigo[300],\r\n },\r\n // 最大高さ\r\n maxBodyHeight: \"calc(100vh - 536px)\", // 固定\r\n // 最小高さ\r\n minBodyHeight: \"400px\", // 固定\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // テーブルソートヘッダー\r\n sortHeader: {\r\n // ソートされているカラム ヘッダー\r\n \"& .MuiTableSortLabel-active\": {\r\n color: theme.palette.text.primary,\r\n },\r\n // ソートアイコンカラー\r\n \"& .MuiTableSortLabel-active .MuiTableSortLabel-icon\": {\r\n color: `${theme.palette.text.primary}!important` as string,\r\n },\r\n // material-table スクロールバーをデフォルトに上書き\r\n \"& > div > div > div > div\": {\r\n overflowY: \"visible !important\",\r\n }\r\n },\r\n })\r\n);\r\n\r\n/** マスタ系のテーブルのフレームを提供します */\r\nconst MasterTableFrame: React.FC<{}> = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {/* 各テーブルが挿入される */}\r\n {props.children}\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default MasterTableFrame;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { MaintenanceItemListItem } from '../../_types';\r\n\r\n/** 整備項目マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MaintenanceItemListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: MaintenanceItemListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MaintenanceItemListItem,\r\n}\r\n\r\n/** 整備項目マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MaintenanceItemListItem,\r\n}\r\n\r\n/** 整備記録テーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"施工機種別\", field: \"machineTypeName\" },\r\n { title: \"整備区分\", field: \"maintenanceDivisionName\" },\r\n { title: \"No.\", field: \"weight\" },\r\n { title: \"整備項目\", field: \"name\" },\r\n { title: \"単位\", field: \"unit\" },\r\n { title: \"入力値下限\", field: \"inputLowerLimit\" },\r\n { title: \"入力値上限\", field: \"inputHigherLimit\" },\r\n { title: \"軽アラーム下限\", field: \"lightAlarmLowerLimit\" },\r\n { title: \"軽アラーム上限\", field: \"lightAlarmHigherLimit\" },\r\n { title: \"重アラーム下限\", field: \"heavyAlarmLowerLimit\" },\r\n { title: \"重アラーム上限\", field: \"heavyAlarmHigherLimit\" },\r\n { title: \"備考\", field: \"remarks\" },\r\n\r\n];\r\n\r\n/** 整備項目マスタテーブルを提供します */\r\nconst MaintenenceItemResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: undefined,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: MaintenanceItemListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default MaintenenceItemResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MaintenanceItemMasterSlice } from '../../../../../modules/slice/maintenance-item/maintenance-item-slice';\r\n// type\r\nimport { MaintenanceItemListItem } from '../../_types';\r\n// component\r\nimport MaintenanceItemResultTable from './MaintenanceItemResultTable'\r\n\r\n/** 整備項目マスタテーブルを提供します */\r\nexport const MaintenanceItemResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: MaintenanceItemListItem[] = useSelector((state: RootState) => state.maintenanceItemMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.maintenanceItemMaster.selectedRowItem);\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: MaintenanceItemListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(MaintenanceItemMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport AddIcon from '@material-ui/icons/Add';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.primary.dark\r\n },\r\n \"&:disabled\": {\r\n backgroundColor: theme.palette.primary.light\r\n }\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * 新規作成ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiCreateButton: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n 新規作成\r\n \r\n )\r\n}\r\nexport default MuiCreateButton;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { ButtonProps } from '@material-ui/core/Button';\r\nimport PageviewIcon from '@material-ui/icons/Pageview';\r\nimport MuiColorButton from './ColorButton/MuiColorButton';\r\n\r\n/**\r\n * プレビューボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiPreviewButton: React.FC = (props) => {\r\n\r\n return (\r\n\r\n }\r\n >\r\n プレビュー\r\n \r\n )\r\n}\r\n\r\nexport default MuiPreviewButton;\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport { Drawer, Backdrop, IconButton, FormControl, FormLabel, RadioGroup, FormControlLabel, Radio } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { KeyValueItem, MachineType } from '../../../../../_types';\r\nimport MuiPreviewButton from '../../../../../components/Buttons/MuiPreviewButton';\r\nimport { ActiveReportViewer } from '../../../../../components/ActiveReportViewer/ActiveReportViewer';\r\n\r\n/** 整備票プレビュードロワーの Prsop を提供します。 */\r\ninterface Props {\r\n /** レポートの url を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport: () => void,\r\n /** プレビューボタンクリック時の処理を表します。 */\r\n onClickPreview: (type: MachineType) => void,\r\n}\r\n\r\n/** ラジオボタンリスト */\r\nconst radioButtons = [\r\n { key: MachineType.BaseMachine, label: \"ベースマシン\" },\r\n { key: MachineType.Auger, label: \"オーガー\" },\r\n { key: MachineType.Lift, label: \"昇降装置\" },\r\n];\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: 150,\r\n margin: \"1rem\",\r\n },\r\n // バックドロップ\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer - 1,\r\n color: '#fff',\r\n },\r\n // ビューワ\r\n viewer: {\r\n width: \"65vw\",\r\n height: \"100%\",\r\n },\r\n // ドロワーのコンテナ\r\n drawerPaper: {\r\n overflowY: \"unset\",\r\n },\r\n // ドロワー閉じるボタン\r\n closeButton: {\r\n position: \"absolute\",\r\n left: -50,\r\n },\r\n // ラジオボタングループ\r\n radioGroup: {\r\n margin: theme.spacing(1, 1, 0, 1),\r\n },\r\n // ラジオボタングループラベル\r\n radioGroupLabel: {\r\n marginBottom: 0,\r\n },\r\n // ラジオボタングループ\r\n radioGroupButton: {\r\n flexDirection: \"row\"\r\n },\r\n }),\r\n);\r\n\r\n/**\r\n * 帳票プレビュードロワー を表示します。\r\n */\r\nexport function MaintenancePreviewDrawer(props: Props) {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n const [selectedType, setSelectedType] = useState(MachineType.BaseMachine);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n /** ドロワーを開きます。 */\r\n const openDrawer = () => {\r\n props.onClickPreview(selectedType);\r\n setIsOpen(true)\r\n if (document.body) document.body.classList.add(\"body-scrolllock\");\r\n }\r\n\r\n /** ドロワーを閉じます。 */\r\n const cloaseDrawer = () => {\r\n setIsOpen(false)\r\n if (document.body) document.body.classList.remove(\"body-scrolllock\");\r\n }\r\n\r\n /**\r\n * ラジオボタンの選択処理を行います。\r\n * @param event\r\n */\r\n const handleChange = (event: React.ChangeEvent) => {\r\n setSelectedType(parseInt((event.target as HTMLInputElement).value));\r\n };\r\n\r\n return (\r\n <>\r\n {/* ラジオボタン */}\r\n \r\n 整備時検査表\r\n \r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label}\r\n />\r\n ))}\r\n \r\n \r\n\r\n \r\n プレビュー\r\n \r\n\r\n\r\n {/* Drawer の variant=\"temporary\" だと、JSViewerの印刷モーダルが表示されないので、\"persistent\" にして、背面の無効化を手動で設置 */}\r\n \r\n\r\n {/* Drawer */}\r\n \r\n {/* close button */}\r\n \r\n \r\n \r\n\r\n {/* JSビューワ*/}\r\n
\r\n {!!props.reportUrl && (\r\n \r\n )}\r\n
\r\n \r\n\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { MaintenanceItemInputItem } from '../../_types';\r\nimport { KeyValueItem, MachineType } from '../../../../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\nimport { MaintenancePreviewDrawer } from '../../../Shared/components/ViewerDrawer/MaintenancePreviewDrawer';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n\r\n // ボタン グループ\r\n buttonGroup: {\r\n marginRight: \"auto\",\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 整備項目マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: MaintenanceItemInputItem) => void),\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n /** 施工機種別一覧を表します。*/\r\n machineTypeList: KeyValueItem[],\r\n /** 整備区分一覧を表します。 */\r\n maintenanceDivisionList: KeyValueItem[]>[],\r\n /** プレビューボタンのクリック処理を行います。 */\r\n onClickPreview: ((type: MachineType) => void),\r\n /** 帳票 URL を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport: () => void,\r\n};\r\n\r\n/**\r\n * 整備項目マスタ 検索エリアを提供します。\r\n * */\r\nconst MaintenanceItemSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n const [selectData, setSelectData] = useState<{ key: number, value: string }[]>([]);\r\n\r\n /** 連動したセレクトボックスの変更を行います */\r\n const onChangeSelectBox = (name: keyof MaintenanceItemInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.value;\r\n\r\n const index = Number.parseInt(value, 10);\r\n const option = props.maintenanceDivisionList.find(item => item.key === index);\r\n\r\n // 入力項目更新\r\n setValues({\r\n ...values,\r\n [name]: value,\r\n maintenanceDivisionId: void 0,\r\n });\r\n\r\n // 連動したセレクトボックス更新\r\n setSelectData(option?.value ?? []);\r\n }\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof MaintenanceItemInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* 施工機種別 */}\r\n \r\n {/* Default */}\r\n\r\n {\"未指定\"}\r\n {/* 選択肢 */}\r\n {props.machineTypeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 整備区分 */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n {/* 選択肢 */}\r\n {selectData && selectData.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 整備項目名 */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n
\r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n
\r\n\r\n {/* プレビュー */}\r\n \r\n\r\n
\r\n\r\n
\r\n\r\n );\r\n};\r\n\r\nexport default MaintenanceItemSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MaintenanceItemMasterSlice, onExcuteAsync, getMaintenancePreviewReportAsync } from '../../../../../modules/slice/maintenance-item/maintenance-item-slice';\r\nimport { MaintenanceItemAdapter } from '../../../../../modules/adapter/maintenance-item/maintenance-item-adapter'\r\n// type\r\nimport { MaintenanceItemInputItem } from '../../_types';\r\nimport { KeyValueItem, MachineType } from '../../../../../_types';\r\n// component\r\nimport MaintenanceItemSearchCondition from './MaintenanceItemSearchCondition';\r\n\r\n/**\r\n * マスタ整備項目 検索エリアを提供します。\r\n * */\r\nexport const MaintenanceItemSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machineTypeList = useSelector((state: RootState) => state.maintenanceItemMaster.selectBoxItem.MachineType);\r\n const maintenanceDivisionList = useSelector((state: RootState) => state.maintenanceItemMaster.selectBoxItem.MaintenanceDivision);\r\n const reportUrl: string = useSelector((state: RootState) => state.maintenanceItemMaster.reportUrl ?? \"\");\r\n\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: MaintenanceItemInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = MaintenanceItemAdapter.instance.getAsync(\r\n {\r\n // セレクトボックスの 0:未選択 を void 0 に変換\r\n item: {\r\n ...inputItem,\r\n machineTypeId: inputItem.machineTypeId === 0 ? void 0 : inputItem.machineTypeId,\r\n maintenanceDivisionId: inputItem.maintenanceDivisionId === 0 ? void 0 : inputItem.maintenanceDivisionId,\r\n\r\n }\r\n },\r\n {\r\n MachineType: machineTypeList,\r\n MaintenanceDivision: maintenanceDivisionList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(MaintenanceItemMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n /** 帳票ボタンのクリック処理を行います。 */\r\n const onClickPreview = (type: MachineType) => {\r\n dispatch(getMaintenancePreviewReportAsync(type));\r\n\r\n }\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(MaintenanceItemMasterSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport amber from '@material-ui/core/colors/amber';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n backgroundColor: amber[500],\r\n color: '#fff',\r\n \"&:hover\": {\r\n backgroundColor: '#b28704',\r\n },\r\n \"&:disabled\": {\r\n backgroundColor: '#ffcd38',\r\n }\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * 追加ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiAddButton: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n 追加\r\n \r\n )\r\n}\r\nexport default MuiAddButton;\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button, { ButtonProps } from '@material-ui/core/Button';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n backgroundColor: theme.palette.error.main,\r\n color: theme.palette.error.contrastText,\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.error.dark\r\n },\r\n \"&:disabled\": {\r\n backgroundColor: theme.palette.error.light\r\n }\r\n }\r\n }),\r\n);\r\n\r\n/**\r\n * 削除ボタンを表示します。\r\n * @param props\r\n */\r\nconst MuiRemoveButton: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n }\r\n onClick={props.onClick}\r\n {...props}\r\n >\r\n 削除\r\n \r\n )\r\n}\r\n\r\nexport default MuiRemoveButton;\r\n","// react\r\nimport * as React from 'react';\r\nimport clsx from 'clsx';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\n// component\r\nimport MuiUpdateButton from '../../../components/Buttons/MuiUpdateButton';\r\nimport MuiAddButton from '../../../components/Buttons/MuiAddButton';\r\nimport MuiRemoveButton from '../../../components/Buttons/MuiRemoveButton';\r\nimport MuiCancelButton from '../../../components/Buttons/MuiCancelButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // 更新時のボタンボックス\r\n updateBox: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除ボタン\r\n remove: {\r\n marginLeft: \"auto\",\r\n },\r\n }),\r\n);\r\n\r\n/** マスタ系 詳細項目のボタングループの Props を提供します。 */\r\ninterface Props {\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 更新不可かどうかを表します。 */\r\n isNonEditabled?: boolean,\r\n};\r\n\r\n/** マスタ系 詳細項目のボタングループを表示します。 */\r\nconst MasterDetailButtonGroup: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {/* ボタングループ */}\r\n {\r\n props.isCreating\r\n ? (\r\n \r\n {/* 追加 */}\r\n props.onClickAdd(event)}\r\n />\r\n {/* キャンセル */}\r\n props.onClickCancel(event)}\r\n />\r\n \r\n )\r\n : (\r\n \r\n {/* 更新 */}\r\n {props.isNonEditabled\r\n ? null\r\n : props.onClickUpdate(event)} />\r\n }\r\n\r\n {/* 削除 */}\r\n props.onClickRemove(event)}\r\n />\r\n \r\n )\r\n }\r\n\r\n \r\n )\r\n}\r\n\r\n\r\nexport default MasterDetailButtonGroup;\r\n","// react\r\nimport * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { MaintenanceItemInputItem, MaintenanceValidateItemInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n // 行コンテナ\r\n rowContainer: {\r\n display: \"flex\",\r\n },\r\n // テキストエリア\r\n textarea: {\r\n width: \"100% !important\",\r\n },\r\n // テキストエリア\r\n inputItem: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 整備項目マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: MaintenanceItemInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 整備グループ一覧を表します。*/\r\n machineTypeList: KeyValueItem[],\r\n /** 整備区分一覧を表します。 */\r\n maintenanceDivisionList: KeyValueItem[],\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof MaintenanceItemInputItem) => void,\r\n /** 連動セレクトボックスの入力値の変更処理を表します。 */\r\n onChangeSelectBox: (event: React.ChangeEvent, name: keyof MaintenanceItemInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: MaintenanceValidateItemInputItem,\r\n};\r\n\r\n/**\r\n * 整備項目マスタ 詳細エリアを提供します。\r\n * */\r\nconst MaintenanceItemDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n
\r\n\r\n {/* 施工機種別 */}\r\n props.onChangeSelectBox(event, \"machineTypeId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.machineType === false}\r\n helperText={props.validateError.machineType}\r\n >\r\n {/* 選択肢 */}\r\n {props.machineTypeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 整備区分 */}\r\n props.onChange(event, \"maintenanceDivisionId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.maintenanceDivision === false}\r\n helperText={props.validateError.maintenanceDivision}\r\n >\r\n {/* 選択肢 */}\r\n {props.maintenanceDivisionList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 重み */}\r\n props.onChange(event, \"weight\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n required\r\n error={!props.validateError.weight === false}\r\n helperText={props.validateError.weight}\r\n\r\n />\r\n\r\n {/* 整備項目名 */}\r\n props.onChange(event, \"name\")}\r\n className={classes.inputItem}\r\n required\r\n error={!props.validateError.maintenanceItem === false}\r\n helperText={props.validateError.maintenanceItem}\r\n\r\n />\r\n\r\n {/* 単位 */}\r\n props.onChange(event, \"unit\")}\r\n />\r\n
\r\n
\r\n {/* 入力値下限 */}\r\n props.onChange(event, \"inputLowerLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 入力値上限 */}\r\n props.onChange(event, \"inputHigherLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値軽アラーム下限 */}\r\n props.onChange(event, \"lightAlarmLowerLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値軽アラーム上限 */}\r\n props.onChange(event, \"lightAlarmHigherLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値重アラーム下限 */}\r\n props.onChange(event, \"heavyAlarmLowerLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値重アラーム上限 */}\r\n props.onChange(event, \"heavyAlarmHigherLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n
\r\n
\r\n {/* 備考 */}\r\n props.onChange(event, \"remarks\")} />\r\n
\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceItemDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MaintenanceItemMasterSlice, onExcuteAsync } from '../../../../../modules/slice/maintenance-item/maintenance-item-slice';\r\nimport { MaintenanceItemAdapter } from '../../../../../modules/adapter/maintenance-item/maintenance-item-adapter'\r\n// type\r\nimport { MaintenanceItemInputItem, MaintenanceValidateItemInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MaintenanceItemDetailCondition from './MaintenanceItemDetailCondition';\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/**\r\n * 整備項目マスタ 詳細エリアを提供します。\r\n * */\r\nexport const MaintenanceItemDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.maintenanceItemMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.maintenanceItemMaster.selectedRowItem);\r\n const machineTypeList = useSelector((state: RootState) => state.maintenanceItemMaster.selectBoxItem.MachineType);\r\n const maintenanceDivisionList = useSelector((state: RootState) => state.maintenanceItemMaster.selectBoxItem.MaintenanceDivision);\r\n\r\n const initialValues: MaintenanceItemInputItem = {\r\n id: selectedItem?.id,\r\n name: selectedItem?.name,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n maintenanceDivisionId: selectedItem?.maintenanceDivisionId,\r\n weight: selectedItem?.weight,\r\n unit: selectedItem?.unit,\r\n inputLowerLimit: selectedItem?.inputLowerLimit ? Number.parseInt(selectedItem.inputLowerLimit, 10) : void 0,\r\n inputHigherLimit: selectedItem?.inputHigherLimit ? Number.parseInt(selectedItem.inputHigherLimit, 10) : void 0,\r\n lightAlarmLowerLimit: selectedItem?.lightAlarmLowerLimit ? Number.parseInt(selectedItem.lightAlarmLowerLimit, 10) : void 0,\r\n lightAlarmHigherLimit: selectedItem?.lightAlarmHigherLimit ? Number.parseInt(selectedItem.lightAlarmHigherLimit, 10) : void 0,\r\n heavyAlarmLowerLimit: selectedItem?.heavyAlarmLowerLimit ? Number.parseInt(selectedItem.heavyAlarmLowerLimit, 10) : void 0,\r\n heavyAlarmHigherLimit: selectedItem?.heavyAlarmHigherLimit ? Number.parseInt(selectedItem.heavyAlarmHigherLimit, 10) : void 0,\r\n remarks: selectedItem?.remarks,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** 整備区分セレクトボックス値を表します。 */\r\n const [selectData, setSelectData] = useState[]>([]);\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n id: selectedItem?.id,\r\n name: selectedItem?.name,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n maintenanceDivisionId: selectedItem?.maintenanceDivisionId,\r\n weight: selectedItem?.weight,\r\n unit: selectedItem?.unit,\r\n inputLowerLimit: selectedItem?.inputLowerLimit ? Number.parseInt(selectedItem.inputLowerLimit, 10) : void 0,\r\n inputHigherLimit: selectedItem?.inputHigherLimit ? Number.parseInt(selectedItem.inputHigherLimit, 10) : void 0,\r\n lightAlarmLowerLimit: selectedItem?.lightAlarmLowerLimit ? Number.parseInt(selectedItem.lightAlarmLowerLimit, 10) : void 0,\r\n lightAlarmHigherLimit: selectedItem?.lightAlarmHigherLimit ? Number.parseInt(selectedItem.lightAlarmHigherLimit, 10) : void 0,\r\n heavyAlarmLowerLimit: selectedItem?.heavyAlarmLowerLimit ? Number.parseInt(selectedItem.heavyAlarmLowerLimit, 10) : void 0,\r\n heavyAlarmHigherLimit: selectedItem?.heavyAlarmHigherLimit ? Number.parseInt(selectedItem.heavyAlarmHigherLimit, 10) : void 0,\r\n remarks: selectedItem?.remarks,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n //行選択時の入力項目更新\r\n useEffect(() => {\r\n const option = maintenanceDivisionList.find(item => item.key === selectedItem?.machineTypeId);\r\n\r\n setSelectData((preValue) => (option?.value ?? []))\r\n\r\n }, [selectedItem, maintenanceDivisionList]);\r\n\r\n /**\r\n * 連動リストボックス値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChangeSelectBox = (event: React.ChangeEvent, name: keyof MaintenanceItemInputItem) => {\r\n\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.value;\r\n\r\n const index = Number.parseInt(value, 10);\r\n const option = maintenanceDivisionList.find(item => item.key === index);\r\n\r\n // 入力項目更新\r\n setValues({\r\n ...values,\r\n [name]: value,\r\n maintenanceDivisionId: void 0,\r\n });\r\n\r\n // 連動したセレクトボックス更新\r\n setSelectData(option?.value ?? []);\r\n }\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof MaintenanceItemInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? MuiTextFieldUtility.LimitationNumber(Number.parseInt(target.value, 10)) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MaintenanceItemAdapter.instance.addAsync(\r\n { item: values },\r\n {\r\n MachineType: machineTypeList,\r\n MaintenanceDivision: maintenanceDivisionList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MaintenanceItemAdapter.instance.updateAsync(\r\n { item: values },\r\n {\r\n MachineType: machineTypeList,\r\n MaintenanceDivision: maintenanceDivisionList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(MaintenanceItemMasterSlice.actions.toggleDialog(true));\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(MaintenanceItemMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let machineType = \"\";\r\n let maintenanceDivision = \"\";\r\n let weight = \"\";\r\n let maintenanceItem = \"\";\r\n\r\n // 施工機種別\r\n if (!values.machineTypeId) {\r\n machineType = \"施工機種別を選択してください\";\r\n result = true;\r\n }\r\n\r\n // 整備区分\r\n if (!values.maintenanceDivisionId) {\r\n maintenanceDivision = \"整備区分を選択してください\";\r\n result = true;\r\n }\r\n\r\n // 重み\r\n if (values.weight == null) {\r\n weight = \"No.を入力してください\";\r\n result = true;\r\n }\r\n\r\n // 整備項目\r\n if (!values.name) {\r\n maintenanceItem = \"整備項目名を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n machineType,\r\n maintenanceDivision,\r\n weight,\r\n maintenanceItem,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport {\r\n Dialog,\r\n DialogActions,\r\n DialogTitle,\r\n DialogContent,\r\n Typography,\r\n TextField,\r\n FormControl,\r\n InputLabel,\r\n OutlinedInput,\r\n InputAdornment,\r\n IconButton,\r\n Divider,\r\n Box,\r\n Grid,\r\n Paper,\r\n Button,\r\n} from '@material-ui/core';\r\nimport { Visibility, VisibilityOff } from '@material-ui/icons';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\n\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiRemoveButton from '../../../../../components/Buttons/MuiRemoveButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // サブタイトル\r\n subtitle: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 名称\r\n name: {\r\n fontSize: \"1.25rem\",\r\n marginRight: theme.spacing(1),\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n // ダイアログコンテンツ(ダイアログ内のTextfiledのlabelが全角4文字以上でスクロールが発生するで、無効にする)\r\n dialogContent: {\r\n overflowY: \"visible\"\r\n }\r\n }),\r\n);\r\n\r\n/** 削除確認ダイアログの入力項目を表します。 */\r\nexport interface RemoveConfirmDialogInputItem {\r\n /** パスワードを表します */\r\n password: string,\r\n}\r\n\r\n/** 削除確認ダイアログの入力項目のバリデーション情報を表します。 */\r\nexport interface RemoveConfirmDialogValidateInputItem {\r\n /** パスワードを表します。 */\r\n readonly password: string;\r\n}\r\n\r\n\r\n/** マスタ項目削除確認ダイアログの Props を表示します。 */\r\ninterface Props {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** 削除ボタンクリック時の処理を表します。 */\r\n onRemoveClick: (event: React.MouseEvent, pwassword: string) => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n /** タイトル */\r\n title?: string\r\n}\r\n\r\n/**\r\n * ステータス編集ダイアログを表示します。\r\n * @param props\r\n */\r\nconst ConfirmDialog: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n }, [props.isOpen])\r\n\r\n /** 入力内容 */\r\n const [inputItem, setInputItem] = useState({ password: \"\" });\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({ password: \"\" });\r\n\r\n /** パスワードの表示状態を表します。 */\r\n const [isShowPassword, setIsShowPassword] = useState(false);\r\n\r\n /**\r\n * 入力項目 内容変更時のイベント処理を行います。\r\n * */\r\n const onChange = (name: keyof RemoveConfirmDialogInputItem) => (event: React.ChangeEvent) => {\r\n\r\n const value = event.target.value;\r\n\r\n // 入力項目更新\r\n setInputItem({ ...inputItem, [name]: value });\r\n };\r\n\r\n\r\n /** パスワード表示非表示ボタン クリック時のイベント処理を行います。*/\r\n const handleClickShowPassword = () => {\r\n setIsShowPassword(preValue => !preValue);\r\n };\r\n\r\n /**\r\n * パスワード表示非表示ボタン マウスダウン時のイベント処理を行います。\r\n * @param event\r\n */\r\n const handleMouseDownPassword = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n };\r\n\r\n /** ダイアログを閉じるときの処理を行います。 */\r\n const onClose = () => {\r\n\r\n setInputItem({ password: \"\" });\r\n setValidate({ password: \"\" });\r\n\r\n props.handleClose();\r\n }\r\n\r\n /**\r\n * 削除ボタンのクリック処理を行います。\r\n * @param event\r\n */\r\n const onRemove = (event: React.MouseEvent) => {\r\n\r\n // バリデーション\r\n const isError = onValidateInputItem()\r\n\r\n if (isError === false) {\r\n setInputItem({ password: \"\" });\r\n setValidate({ password: \"\" });\r\n props.onRemoveClick(event, inputItem.password);\r\n }\r\n }\r\n\r\n /** 入力内容のバリデーションを行います。 */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let passError = \"\";\r\n\r\n // パスワード\r\n if (!inputItem.password) {\r\n passError = \"パスワードを入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({ password: passError });\r\n\r\n // 結果\r\n return result;\r\n\r\n }\r\n\r\n /**\r\n * form 送信イベント処理を行います\r\n * @param e\r\n */\r\n const submitHandler = (e: React.FormEvent) => {\r\n // Enter key による submit を無効にする\r\n e.preventDefault();\r\n }\r\n\r\n return (\r\n \r\n\r\n {/* タイトル */}\r\n \r\n \r\n {props.title ?? \"マスタ項目 削除確認\"} \r\n \r\n \r\n\r\n\r\n \r\n {/* message */}\r\n \r\n 選択した項目を削除します。\r\n \r\n \r\n パスワードを入力してください。\r\n \r\n\r\n
submitHandler(e)}>\r\n {/* パスワード */}\r\n \r\n \r\n {isShowPassword ? : }\r\n \r\n \r\n )\r\n }}\r\n required\r\n error={!validate.password === false}\r\n helperText={validate.password}\r\n />\r\n\r\n \r\n\r\n
\r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n onRemove(event)}\r\n />\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ConfirmDialog;\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { MaintenanceItemAdapter } from '../../../../../modules/adapter/maintenance-item/maintenance-item-adapter';\r\nimport { MaintenanceItemMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/maintenance-item/maintenance-item-slice';\r\nimport { MaintenanceItemRequest } from '../../../../../modules/adapter/maintenance-item/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.maintenanceItemMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.maintenanceItemMaster.selectedRowItem ?? null);\r\n const selectBoxItem = useSelector((state: RootState) => state.maintenanceItemMaster.selectBoxItem);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: MaintenanceItemRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n maintenanceDivisionId: selectedItem?.maintenanceDivisionId,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, selectBoxItem, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(MaintenanceItemMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n // Over ride\r\n '& .MuiAccordion-root': { // Over ride\r\n marginBottom: \"1rem\",\r\n },\r\n '& .MuiTextField-root': {\r\n width: \"250px\",\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n // 活性制御\r\n disabled: {\r\n pointerEvents: \"none\",\r\n opacity: 0.4,\r\n },\r\n // ボーダー\r\n border: {\r\n borderStyle: \"solid\",\r\n borderWidth: 4,\r\n borderColor: theme.palette.background.paper,\r\n },\r\n\r\n //青枠背景:新規作成状態\r\n boxBuleIn: {\r\n animation: `$boxBuleInEffect .2s ${theme.transitions.easing.easeIn} forwards`,\r\n },\r\n \"@keyframes boxBuleInEffect\": {\r\n \"0%\": {\r\n backgroundColor: theme.palette.background.paper,\r\n borderColor: theme.palette.background.paper,\r\n },\r\n \"100%\": {\r\n backgroundColor: fade(theme.palette.warning.main, 0.02),\r\n borderColor: theme.palette.warning.main,\r\n },\r\n },\r\n //黄枠背景:項目選択(更新)状態\r\n boxYellowIn: {\r\n animation: `$boxYellowInEffect .2s ${theme.transitions.easing.easeIn} forwards`,\r\n },\r\n \"@keyframes boxYellowInEffect\": {\r\n \"0%\": {\r\n backgroundColor: theme.palette.background.paper,\r\n borderColor: theme.palette.background.paper,\r\n },\r\n \"100%\": {\r\n backgroundColor: fade(theme.palette.secondary.main, 0.02),\r\n borderColor: theme.palette.secondary.main,\r\n },\r\n },\r\n }),\r\n);\r\n\r\ninterface Props {\r\n // 上部コンテンツ(検索エリア)を表します。\r\n search: React.ReactNode,\r\n // 中部コンテンツ(テーブルエリア)を表します。\r\n table: React.ReactNode,\r\n // 下部コンテンツ(詳細エリア)を表します。\r\n detail: React.ReactNode,\r\n // 新規作成状態かどうかを表します。\r\n isCreating: boolean,\r\n // 行選択状態かどうかを表します。\r\n isSelected: boolean,\r\n}\r\n\r\ninterface State {\r\n /** 上部コンテンツが展開されているかどうかを表します。 */\r\n isExpandedSearch: boolean,\r\n /** 中部コンテンツが展開されているかどうかを表します。 */\r\n isExpandedTable: boolean,\r\n /** 下部コンテンツが展開されているかどうかを表します。 */\r\n isExpandedDetail: boolean,\r\n}\r\n\r\n/**\r\n * マスタ系 3段 レイアウトを表示します。\r\n * @param props\r\n */\r\nconst MasterLayout: React.FC = (props) => {\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State を提供します。*/\r\n // 現状常に展開(開閉操作しない)\r\n const [expanded, isExpanded] = React.useState({\r\n isExpandedSearch: true,\r\n isExpandedTable: true,\r\n isExpandedDetail: true,\r\n });\r\n\r\n return (\r\n <>\r\n \r\n\r\n {/* 検索条件 */}\r\n \r\n\r\n {/* 検索条件エリア */}\r\n {props.search}\r\n\r\n \r\n\r\n \r\n\r\n {/* 検索結果 */}\r\n \r\n \r\n {/* テーブル */}\r\n {props.table}\r\n\r\n \r\n \r\n\r\n \r\n\r\n {/* 詳細表示 */}\r\n \r\n\r\n {/* 詳細表示エリア */}\r\n {props.detail}\r\n\r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\nexport default MasterLayout;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MaintenanceItemMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/maintenance-item/maintenance-item-slice';\r\n// component\r\nimport { MaintenanceItemResultTableContainer } from './components/TableContent/MaintenanceItemResultTableContainer';\r\nimport { MaintenanceItemSearchConditionContainer } from './components/SearchContent/MaintenanceItemSearchConditionContainer';\r\nimport { MaintenanceItemDetailConditionContainer } from './components/DetailContent/MaintenanceItemDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * 整備項目マスタ画面を提供します。\r\n * */\r\nconst MaintenanceItemPage: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterMaintenanceItem.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.maintenanceItemMaster.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.maintenanceItemMaster.isReportLoading ?? false);\r\n const isShowMessage = useSelector((state: RootState) => state.maintenanceItemMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.maintenanceItemMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.maintenanceItemMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.maintenanceItemMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MaintenanceItemMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceItemPage;\r\n","import { MaintenanceDivisionListItem, MaintenanceDivisionInputItem } from '../../../pages/Master/MaintenanceDivision/_types';\r\nimport { MaintenanceDivisionRequest, MaintenanceDivisionSelectBoxItemState } from './types';\r\nimport { MaintenanceDivisionInput, MaintenanceDivisionItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `整備区分マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MaintenanceDivisionUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(\r\n selectBoxItem: MaintenanceDivisionSelectBoxItemState,\r\n items?: MaintenanceDivisionItem[]\r\n ): MaintenanceDivisionListItem[] {\r\n const result: MaintenanceDivisionListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null\r\n || source.machineTypeId == null\r\n || source.weight == null\r\n || source.lockVersion == null) {\r\n continue;\r\n }\r\n\r\n // セレクトボックスの名称を取得\r\n const typeItem = selectBoxItem.MachineType.find(_ => _.key === source.machineTypeId);\r\n\r\n const item: MaintenanceDivisionListItem = {\r\n id: source.id,\r\n name: source.name ?? \"\",\r\n machineType: typeItem?.value ?? \"\",\r\n machineTypeId: source.machineTypeId,\r\n weight: source.weight,\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: MaintenanceDivisionRequest): MaintenanceDivisionInput {\r\n const result = new MaintenanceDivisionInput();\r\n result.init({\r\n item: MaintenanceDivisionUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: MaintenanceDivisionInputItem): MaintenanceDivisionItem {\r\n const result = new MaintenanceDivisionItem();\r\n result.init({\r\n id: source.id,\r\n name: source.name,\r\n machineTypeId: source.machineTypeId,\r\n weight: source.weight,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MaintenanceDivisionClient, MaintenanceDivisionInput, MaintenanceDivisionOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MaintenanceDivisionRequest, MaintenanceDivisionResult, MaintenanceDivisionSelectBoxItemState } from './types';\r\nimport { MaintenanceDivisionUtility } from './maintenance-division-utility';\r\n\r\n/**\r\n * `整備区分マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MaintenanceDivisionAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MaintenanceDivisionAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): MaintenanceDivisionResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(\r\n parameter: MaintenanceDivisionRequest,\r\n selectBoxItem: MaintenanceDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new MaintenanceDivisionInput();\r\n input.init(MaintenanceDivisionUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceDivisionResult = {\r\n isError: false,\r\n items: MaintenanceDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(\r\n parameter: MaintenanceDivisionRequest,\r\n selectBoxItem: MaintenanceDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new MaintenanceDivisionInput();\r\n input.init(MaintenanceDivisionUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceDivisionResult = {\r\n isError: false,\r\n items: MaintenanceDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(\r\n parameter: MaintenanceDivisionRequest,\r\n selectBoxItem: MaintenanceDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.machineTypeId == null ? \"施工機種別 ID\"\r\n : parameter.item.weight == null ? \"No\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MaintenanceDivisionInput();\r\n input.init(MaintenanceDivisionUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceDivisionResult = {\r\n isError: false,\r\n items: MaintenanceDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(\r\n parameter: MaintenanceDivisionRequest,\r\n selectBoxItem: MaintenanceDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MaintenanceDivisionInput();\r\n input.init(MaintenanceDivisionUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MaintenanceDivisionResult = {\r\n isError: false,\r\n items: MaintenanceDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MaintenanceDivisionClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { MaintenanceDivisionAdapter } from '../../adapter/maintenance-division/maintenance-division-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { MaintenanceDivisionRequest, MaintenanceDivisionResult, MaintenanceDivisionSelectBoxItemState } from '../../adapter/maintenance-division/types';\r\nimport { MaintenanceDivisionListItem } from '../../../pages/Master/MaintenanceDivision/_types';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\nimport { MachineType, KeyValueItem } from '../../../_types';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: {\r\n MachineType: [],\r\n },\r\n isDialogOpen: false,\r\n\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const MaintenanceDivisionSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'MaintenanceDivision',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceDivisionSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(MaintenanceDivisionSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(MaintenanceDivisionSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(MaintenanceDivisionSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MaintenanceDivisionSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceDivisionSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(MaintenanceDivisionSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(MaintenanceDivisionSlice.actions.fetchStart());\r\n\r\n // 施工機種別\r\n const machineTypeResult = await SharedAdapter.instance.getMachineTypeAsync();\r\n\r\n // 異常確認\r\n if (machineTypeResult.isError) {\r\n // 施工機種別 異常メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(`施工機種別取得エラー:${machineTypeResult.errorMessage}`));\r\n\r\n } else {\r\n // 正常\r\n // リストの項目を store に保存\r\n dispatch(MaintenanceDivisionSlice.actions.getSelectBoxItem({\r\n MachineType: machineTypeResult.items,\r\n }));\r\n\r\n // データ取得\r\n const result = await MaintenanceDivisionAdapter.instance.getAsync(\r\n { item: {} },\r\n { MachineType: machineTypeResult.items }\r\n );\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MaintenanceDivisionSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MaintenanceDivisionSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showSuccessMessage());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceDivisionSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: MaintenanceDivisionRequest,\r\n selectBoxItem: MaintenanceDivisionSelectBoxItemState,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceDivisionSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await MaintenanceDivisionAdapter.instance.removeAsync(parameter, selectBoxItem);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MaintenanceDivisionSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MaintenanceDivisionSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(MaintenanceDivisionSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(MaintenanceDivisionSlice.actions.clearSelectedItem());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MaintenanceDivisionSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 帳票プレビュー情報を取得します。\r\n * @param type 施工機種別を指定します。\r\n */\r\nexport const getMaintenancePreviewReportAsync = (type: MachineType) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(MaintenanceDivisionSlice.actions.fetchStart());\r\n dispatch(MaintenanceDivisionSlice.actions.changeReportLoadingFlag(true));\r\n dispatch(MaintenanceDivisionSlice.actions.updatePreviewReport(\"\"));\r\n\r\n // 通信処理\r\n const result = await ReportAdapter.instance.getMaintenancePreviewReport({ machineType: type });\r\n\r\n // 異常確認\r\n if (result.isError || !result.reportUrl) {\r\n // 異常メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(`帳票プレビュー情報 取得エラー:${result.errorMessage}`));\r\n dispatch(MaintenanceDivisionSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showSuccessMessage());\r\n\r\n dispatch(MaintenanceDivisionSlice.actions.updatePreviewReport(result.reportUrl));\r\n }\r\n\r\n } catch (error) {\r\n // メッセージ\r\n dispatch(MaintenanceDivisionSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(MaintenanceDivisionSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(MaintenanceDivisionSlice.actions.fetchEnd());\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { MaintenanceDivisionListItem } from \"../../_types\"\r\n\r\n/** 整備区分マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MaintenanceDivisionListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: MaintenanceDivisionListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MaintenanceDivisionListItem,\r\n}\r\n\r\n/** 整備区分マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MaintenanceDivisionListItem,\r\n}\r\n\r\n/** 整備区分マスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"施工機種別\", field: \"machineType\" },\r\n { title: \"No.\", field: \"weight\", width: 200 },\r\n { title: \"整備区分\", field: \"name\" },\r\n];\r\n\r\n/** 整備区分マスタテーブルを提供します */\r\nconst MaintenanceDivisionResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: undefined,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: MaintenanceDivisionListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default MaintenanceDivisionResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MaintenanceDivisionSlice } from '../../../../../modules/slice/maintenance-division/maintenance-division-slice';\r\n// type\r\nimport { MaintenanceDivisionListItem } from '../../_types';\r\n// component\r\nimport MaintenanceDivisionResultTable from './MaintenanceDivisionResultTable';\r\n\r\n/** 整備区分マスタテーブルを提供します */\r\nexport const MaintenanceDivisionResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: MaintenanceDivisionListItem[] = useSelector((state: RootState) => state.maintenanceDivisionMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.maintenanceDivisionMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: MaintenanceDivisionListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(MaintenanceDivisionSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { MaintenanceDivisionInputItem } from '../../_types';\r\nimport { KeyValueItem, MachineType } from '../../../../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\nimport { MaintenancePreviewDrawer } from '../../../Shared/components/ViewerDrawer/MaintenancePreviewDrawer';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n\r\n // ボタン グループ\r\n buttonGroup: {\r\n marginRight: \"auto\",\r\n },\r\n }),\r\n);\r\n\r\n/** 整備区分マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: MaintenanceDivisionInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n /** 点検グループ一覧を表します。*/\r\n machineTypeList: KeyValueItem[],\r\n /** プレビューボタンのクリック処理を行います。 */\r\n onClickPreview: ((type: MachineType) => void),\r\n /** 帳票 URL を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport: () => void,\r\n};\r\n\r\n/**\r\n * 整備区分マスタ 検索エリアを提供します。\r\n * */\r\nconst MaintenanceDivisionSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof MaintenanceDivisionInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* 施工機種別 */}\r\n \r\n {/* Default */}\r\n\r\n {\"未指定\"}\r\n {/* 選択肢 */}\r\n {props.machineTypeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 整備区分 */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n
\r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n
\r\n\r\n {/* プレビュー */}\r\n \r\n\r\n
\r\n\r\n
\r\n\r\n );\r\n};\r\n\r\nexport default MaintenanceDivisionSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MaintenanceDivisionSlice, onExcuteAsync, getMaintenancePreviewReportAsync } from '../../../../../modules/slice/maintenance-division/maintenance-division-slice';\r\nimport { MaintenanceDivisionAdapter } from '../../../../../modules/adapter/maintenance-division/maintenance-division-adapter'\r\n// type\r\nimport { MaintenanceDivisionInputItem } from '../../_types';\r\nimport { KeyValueItem, MachineType } from '../../../../../_types';\r\n// component\r\nimport MaintenanceDivisionSearchCondition from './MaintenanceDivisionSearchCondition';\r\n\r\n/**\r\n * 整備区分マスタ 検索エリアを提供します。\r\n * */\r\nexport const MaintenanceDivisionSearchConditionContainer: React.FC<{}> = (props) => {\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machineTypeList = useSelector((state: RootState) => state.maintenanceDivisionMaster.selectBoxItem.MachineType);\r\n const reportUrl: string = useSelector((state: RootState) => state.maintenanceDivisionMaster.reportUrl ?? \"\");\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: MaintenanceDivisionInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = MaintenanceDivisionAdapter.instance.getAsync(\r\n {\r\n // セレクトボックスの 0:未選択 を void 0 に変換\r\n item: {\r\n ...inputItem,\r\n machineTypeId: inputItem.machineTypeId === 0 ? void 0 : inputItem.machineTypeId,\r\n }\r\n },\r\n { MachineType: machineTypeList }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(MaintenanceDivisionSlice.actions.chageCreating(true))\r\n }\r\n\r\n /** 帳票ボタンのクリック処理を行います。 */\r\n const onClickPreview = (type: MachineType) => {\r\n dispatch(getMaintenancePreviewReportAsync(type));\r\n\r\n }\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(MaintenanceDivisionSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { MaintenanceDivisionInputItem, MaintenanceDivisionValidateInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n\r\n // テキストエリア\r\n textarea: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 整備区分マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: MaintenanceDivisionInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 施工機種別一覧を表します。 */\r\n machineTypeList: KeyValueItem[],\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof MaintenanceDivisionInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: MaintenanceDivisionValidateInputItem,\r\n\r\n};\r\n\r\n/**\r\n * 整備区分マスタ 詳細エリアを提供します。\r\n * */\r\nconst MaintenanceDivisionDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n\r\n \r\n\r\n {/* 施工機種別 */}\r\n props.onChange(event, \"machineTypeId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.machineType === false}\r\n helperText={props.validateError.machineType}\r\n >\r\n {/* 選択肢 */}\r\n {props.machineTypeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 重み */}\r\n props.onChange(event, \"weight\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n required\r\n error={!props.validateError.weight === false}\r\n helperText={props.validateError.weight}\r\n />\r\n\r\n {/* 整備区分名 */}\r\n props.onChange(event, \"name\")}\r\n required\r\n error={!props.validateError.maintenanceDivision === false}\r\n helperText={props.validateError.maintenanceDivision}\r\n />\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceDivisionDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MaintenanceDivisionSlice, onExcuteAsync } from '../../../../../modules/slice/maintenance-division/maintenance-division-slice';\r\nimport { MaintenanceDivisionAdapter } from '../../../../../modules/adapter/maintenance-division/maintenance-division-adapter'\r\n// type\r\nimport { MaintenanceDivisionInputItem, MaintenanceDivisionValidateInputItem } from '../../_types';\r\n// component\r\nimport MaintenanceDivisionDetailCondition from './MaintenanceDivisionDetailCondition'\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/**\r\n * 整備区分マスタ 詳細エリアを提供します。\r\n * */\r\nexport const MaintenanceDivisionDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.maintenanceDivisionMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.maintenanceDivisionMaster.selectedRowItem);\r\n\r\n const machineTypeList = useSelector((state: RootState) => state.maintenanceDivisionMaster.selectBoxItem.MachineType);\r\n\r\n const initialValues: MaintenanceDivisionInputItem = {\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n name: selectedItem?.name,\r\n weight: selectedItem?.weight,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n name: selectedItem?.name,\r\n weight: selectedItem?.weight,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof MaintenanceDivisionInputItem) => {\r\n\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? MuiTextFieldUtility.LimitationNumber(Number.parseInt(target.value, 10)) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MaintenanceDivisionAdapter.instance.addAsync(\r\n { item: values },\r\n { MachineType: machineTypeList }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MaintenanceDivisionAdapter.instance.updateAsync(\r\n { item: values },\r\n { MachineType: machineTypeList }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(MaintenanceDivisionSlice.actions.toggleDialog(true));\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(MaintenanceDivisionSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let machineType = \"\";\r\n let weight = \"\";\r\n let maintenanceDivision = \"\";\r\n\r\n // 施工機種別\r\n if (!values.machineTypeId) {\r\n machineType = \"施工機種別を選択してください\";\r\n result = true;\r\n }\r\n\r\n // 重み\r\n if (values.weight == null) {\r\n weight = \"No.を入力してください\";\r\n result = true;\r\n }\r\n\r\n // 整備区分\r\n if (!values.name) {\r\n maintenanceDivision = \"整備区分を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n machineType,\r\n weight,\r\n maintenanceDivision,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { MaintenanceDivisionAdapter } from '../../../../../modules/adapter/maintenance-division/maintenance-division-adapter';\r\nimport { MaintenanceDivisionSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/maintenance-division/maintenance-division-slice';\r\nimport { MaintenanceDivisionRequest } from '../../../../../modules/adapter/maintenance-division/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.maintenanceDivisionMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.maintenanceDivisionMaster.selectedRowItem ?? null);\r\n const selectBoxItem = useSelector((state: RootState) => state.maintenanceDivisionMaster.selectBoxItem);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: MaintenanceDivisionRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, selectBoxItem, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(MaintenanceDivisionSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MaintenanceDivisionSlice, onExcuteMountedAsync } from '../../../modules/slice/maintenance-division/maintenance-division-slice';\r\n// component\r\nimport { MaintenanceDivisionResultTableContainer } from './components/TableContent/MaintenanceDivisionResultTableContainer';\r\nimport { MaintenanceDivisionSearchConditionContainer } from './components/SearchContent/MaintenanceDivisionSearchConditionContainer';\r\nimport { MaintenanceDivisionDetailConditionContainer } from './components/DetailContent/MaintenanceDivisionDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n\r\n/**\r\n * 整備区分マスタ画面を提供します。\r\n * */\r\nconst MaintenanceDivisioinPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterMaintenanceDivisioin.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.maintenanceDivisionMaster.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.maintenanceDivisionMaster.isReportLoading ?? false);\r\n const isShowMessage = useSelector((state: RootState) => state.maintenanceDivisionMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.maintenanceDivisionMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.maintenanceDivisionMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.maintenanceDivisionMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MaintenanceDivisionSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default MaintenanceDivisioinPage;\r\n","import { MachineListItem, MachineInputItem } from '../../../pages/Master/Machine/_types';\r\nimport { MachineRequest, MachineMasterSelectBoxItemState } from './types';\r\nimport { MachineInput, MachineItem, ConnectedCtuType } from '../../swagger-clients';\r\nimport { SharedUtility } from '../../shared/shared-utility';\r\n\r\n/**\r\n * `施工機マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MachineUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(\r\n selectBoxItem: MachineMasterSelectBoxItemState,\r\n items?: MachineItem[],\r\n ): MachineListItem[] {\r\n const result: MachineListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.machineId == null\r\n || source.manufacturerId == null\r\n || source.modelId == null\r\n || source.modelYear == null\r\n || source.typeId == null\r\n || source.lockVersion == null) {\r\n continue;\r\n }\r\n\r\n // セレクトボックスの名称を取得\r\n const typeItem = selectBoxItem.MachineType.find(_ => _.key === source.typeId);\r\n const modelItem = selectBoxItem.Model.find(_ => _.key === source.modelId);\r\n const manufacturerItem = selectBoxItem.Manufacturer.find(_ => _.key === source.manufacturerId);\r\n const ctuItem = selectBoxItem.CtuId.find(_ => _.value === source.ctuId);\r\n const mainteCtuItem = selectBoxItem.MaintenanceCtuId.find(_ => _.value === source.maintenanceCtuId);\r\n const modelYear = source.modelYear == null ? \"\" : SharedUtility.toYearMonthString(new Date(source.modelYear));\r\n\r\n const item: MachineListItem = {\r\n id: source.machineId,\r\n type: typeItem?.value ?? \"\",\r\n typeId: source.typeId,\r\n ctuId: ctuItem?.value ?? \"\",\r\n maintenanceCtuId: mainteCtuItem?.value ?? \"\",\r\n model: modelItem?.value ?? \"\",\r\n modelId: source.modelId,\r\n modelYear: modelYear,\r\n manufacturer: manufacturerItem?.value ?? \"\",\r\n manufacturerId: source.manufacturerId,\r\n connectedCtu: SharedUtility.toConectedCtu(source.connectedCtu),\r\n connectedCtuText: SharedUtility.toConectedCtuText(source.connectedCtu),\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: MachineRequest): MachineInput {\r\n const result = new MachineInput();\r\n result.init({\r\n item: MachineUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: MachineInputItem): MachineItem {\r\n const result = new MachineItem();\r\n\r\n result.init({\r\n machineId: source.id,\r\n ctuId: source.ctuId,\r\n maintenanceCtuId: source.maintenanceCtuId,\r\n typeId: source.type,\r\n modelId: source.model,\r\n modelYear: source.modelYear == null ? void 0 : SharedUtility.toFormatDateString(source.modelYear),\r\n manufacturerId: source.manufacturer,\r\n connectedCtu: source.connectedCtu == null ? ConnectedCtuType.NotApplicable : SharedUtility.fromConectedCtu(source.connectedCtu),\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MachineClient, MachineInput, MachineOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MachineRequest, MachineResult, MachineMasterSelectBoxItemState } from './types';\r\nimport { MachineUtility } from './machine-utility';\r\n\r\n/**\r\n * `施工機マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MachineAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MachineAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): MachineResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(\r\n parameter: MachineRequest,\r\n selectItem: MachineMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new MachineInput();\r\n input.init(MachineUtility.toInput(parameter));\r\n\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineResult = {\r\n isError: false,\r\n items: MachineUtility.toListItem(selectItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(\r\n parameter: MachineRequest,\r\n selectItem: MachineMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new MachineInput();\r\n input.init(MachineUtility.toInput(parameter));\r\n\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineResult = {\r\n isError: false,\r\n items: MachineUtility.toListItem(selectItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(\r\n parameter: MachineRequest,\r\n selectItem: MachineMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.type == null ? \"施工機種別 ID\"\r\n : parameter.item.ctuId == null ? \"CTU番号\"\r\n : parameter.item.model == null ? \"型式 ID\"\r\n : parameter.item.manufacturer == null ? \"メーカー ID\"\r\n : parameter.item.modelYear == null ? \"年式 ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MachineInput();\r\n input.init(MachineUtility.toInput(parameter));\r\n\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineResult = {\r\n isError: false,\r\n items: MachineUtility.toListItem(selectItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(\r\n parameter: MachineRequest,\r\n selectItem: MachineMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.type == null ? \"施工機種別\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MachineInput();\r\n input.init(MachineUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MachineResult = {\r\n isError: false,\r\n items: MachineUtility.toListItem(selectItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MachineClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { MachineAdapter } from '../../adapter/machine/machine-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { MachineRequest, MachineResult, MachineMasterSelectBoxItemState } from '../../adapter/machine/types';\r\nimport { MachineListItem } from '../../../pages/Master/Machine/_types';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: {\r\n MachineType: [],\r\n Model: [],\r\n Manufacturer: [],\r\n CtuId: [],\r\n MaintenanceCtuId: [],\r\n },\r\n isDialogOpen: false,\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const MachineMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'Machine',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(MachineMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(MachineMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(MachineMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MachineMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n console.log({ error });\r\n\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`${error.toString()}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(MachineMasterSlice.actions.resetState());\r\n\r\n // 処理中 ON\r\n dispatch(MachineMasterSlice.actions.fetchStart());\r\n\r\n // 施工機種別\r\n const machineTypeWaiter = SharedAdapter.instance.getMachineTypeAsync();\r\n // 型式\r\n const modelWaiter = SharedAdapter.instance.getModelAsync();\r\n // メーカー\r\n const manufacturerWaiter = SharedAdapter.instance.getManufacturerAsync();\r\n // CTU 番号\r\n const ctuWaiter = SharedAdapter.instance.getCtuAsync();\r\n\r\n //まとめて取得\r\n const selectBoxresult = await Promise.all([machineTypeWaiter, modelWaiter, manufacturerWaiter, ctuWaiter]) // 直接配列に渡したらエラーなる\r\n const machineTypeResult = selectBoxresult[0];\r\n const modelResult = selectBoxresult[1];\r\n const manufacturerResult = selectBoxresult[2];\r\n const ctuResult = selectBoxresult[3];\r\n\r\n // 異常確認\r\n if (machineTypeResult.isError) {\r\n // 施工機種別 異常メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`施工機種別取得エラー:${machineTypeResult.errorMessage}`));\r\n\r\n } else if (modelResult.isError) {\r\n // 型式 異常メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`型式取得エラー:${modelResult.errorMessage}`));\r\n\r\n } else if (manufacturerResult.isError) {\r\n // メーカー 異常メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`メーカー取得エラー:${manufacturerResult.errorMessage}`));\r\n } else if (ctuResult.isError) {\r\n // CTU 番号 異常メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`CTU番号取得エラー:${ctuResult.errorMessage}`));\r\n } else {\r\n // 正常\r\n // リストの項目を store に保存\r\n dispatch(MachineMasterSlice.actions.getSelectBoxItem({\r\n MachineType: machineTypeResult.items,\r\n Model: modelResult.items,\r\n Manufacturer: manufacturerResult.items,\r\n CtuId: ctuResult.items ?? [],\r\n MaintenanceCtuId: ctuResult.maintenanceItems ?? [],\r\n }));\r\n\r\n // データ取得\r\n const result = await MachineAdapter.instance.getAsync(\r\n { item: {} },\r\n {\r\n MachineType: machineTypeResult.items,\r\n Model: modelResult.items,\r\n Manufacturer: manufacturerResult.items,\r\n CtuId: ctuResult.items ?? [],\r\n MaintenanceCtuId: ctuResult.maintenanceItems ?? [],\r\n }\r\n );\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MachineMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MachineMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MachineMasterSlice.actions.showSuccessMessage());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: MachineRequest,\r\n selectBoxItem: MachineMasterSelectBoxItemState,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MachineMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await MachineAdapter.instance.removeAsync(parameter, selectBoxItem);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MachineMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MachineMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MachineMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(MachineMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(MachineMasterSlice.actions.clearSelectedItem());\r\n\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MachineMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MachineMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable, { Column } from \"material-table\";\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n\r\n// type\r\nimport { MachineListItem } from \"../../_types\"\r\n\r\n/** 施工機マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MachineListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: MachineListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MachineListItem,\r\n\r\n}\r\n\r\n/** 施工機マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MachineListItem,\r\n}\r\n\r\n/** 施工機マスタテーブルのカラムを表します。 */\r\nconst columns: Column[] = [\r\n { title: \"施工機種別\", field: \"type\", type: \"string\" },\r\n { title: \"社番\", field: \"id\", type: \"string\" },\r\n { title: \"型式\", field: \"model\", type: \"string\" },\r\n { title: \"メーカー\", field: \"manufacturer\", type: \"string\" },\r\n { title: \"年式\", field: \"modelYear\", type: \"date\" },\r\n { title: \"CTUあり/なし\", field: \"connectedCtuText\", type: \"string\" },\r\n { title: \"自動CTU番号\", field: \"ctuId\", type: \"string\" },\r\n { title: \"保全CTU番号\", field: \"maintenanceCtuId\", type: \"string\" },\r\n];\r\n\r\n/** 施工機マスタテーブルを提供します */\r\nconst MachineResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: undefined,\r\n });\r\n\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: MachineListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id && values.selectedRow?.type === rowData.type) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n\r\n \r\n\r\n );\r\n\r\n};\r\nexport default MachineResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MachineMasterSlice } from '../../../../../modules/slice/machine/machine-slice';\r\n// type\r\nimport { MachineListItem } from '../../_types';\r\n// component\r\nimport MachineResultTable from './MachineResultTable'\r\n\r\n/** 整備項目テーブルを提供します */\r\nexport const MachineResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: MachineListItem[] = useSelector((state: RootState) => state.machineMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.machineMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: MachineListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(MachineMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n\r\n };\r\n\r\n return (\r\n\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n\r\n\r\n );\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { FormControl, FormLabel, FormControlLabel, RadioGroup, Radio } from '@material-ui/core';\r\n// type\r\nimport { MachineInputItem } from '../../_types';\r\nimport { MachineType, ConnectedCtuType } from '../../../../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\nimport { SharedUtility } from '../../../../../modules/shared/shared-utility'\r\nimport { MachineType as DtoMachineType } from '../../../../../modules/swagger-clients';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n radioGroup: {\r\n margin: theme.spacing(1, 1, 0, 1),\r\n },\r\n // ラジオボタングループラベル\r\n radioGroupLabel: {\r\n marginBottom: 0,\r\n },\r\n // ラジオボタングループ\r\n radioGroupButton: {\r\n flexDirection: \"row\"\r\n },\r\n }),\r\n);\r\n\r\n/** 施工機マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: (event: React.MouseEvent, inputItem: MachineInputItem) => void,\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n onClickAdd: (() => void),\r\n /** 施工機種別一覧を表します。*/\r\n typeList: { key: number, value: string }[],\r\n /** 型式一覧を表します。 */\r\n modelList: { key: number, value: string }[],\r\n /** メーカー一覧を表します。 */\r\n manufacturerList: { key: number, value: string }[],\r\n};\r\n\r\n/**\r\n * 施工機マスタ 検索エリアを提供します。\r\n * */\r\nconst MachineSearchCondition: React.FC = (props) => {\r\n\r\n /** ラジオボタンリスト */\r\n const radioButtons = [\r\n { key: ConnectedCtuType.NotApplicable, label: \"未指定\" },\r\n { key: ConnectedCtuType.Connected, label: \"CTUあり\" },\r\n { key: ConnectedCtuType.Disconnected, label: \"CTUなし\" },\r\n ];\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof MachineInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"radio\" ? parseInt(target.value) : target.value;\r\n\r\n if (name === \"type\") {\r\n const selctedTypeId = typeof value === \"number\" ? value : parseInt(target.value)\r\n\r\n if (!checkSelectedBaseMachine(selctedTypeId)) {\r\n // ベースマシン以外が選択された場合\r\n // 入力項目更新\r\n setValues({\r\n ...values,\r\n type: selctedTypeId,\r\n connectedCtu: ConnectedCtuType.NotApplicable // CTUありなしを未指定に設定\r\n });\r\n } else {\r\n // 入力項目更新\r\n setValues({ ...values, type: selctedTypeId });\r\n }\r\n\r\n } else {\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n\r\n }\r\n };\r\n\r\n /**\r\n * 日付の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeDate = (newValue: Date | null) => {\r\n\r\n if (newValue != null) {\r\n newValue.setDate(1); // 日付を 1 に設定\r\n newValue.setHours(0, 0, 0, 0); // 時間を ゼロ(00:00:000) に設定\r\n }\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n modelYear: newValue,\r\n }\r\n ))\r\n };\r\n\r\n /**\r\n * 選択された施工機種別がベースマシンかどうかを判定します。\r\n * @param value\r\n * @returns ベースマシンの場合は true を、それ以外の場合は false を返します。\r\n */\r\n const checkSelectedBaseMachine = (value?: number): boolean => {\r\n // マスタ系画面では施工機種別はリストで受け取っいる。\r\n // リストは BE側で Enum で定義されている 1: ベースマシン 2: 昇降装置 3:オーガー 0: 未指定(この画面で定義)\r\n // number -> BE定義のEnum -> FE定義のEnum変換が必要\r\n\r\n let result = false;\r\n if (value != null && value in DtoMachineType) {\r\n result = SharedUtility.toMachineType(value) === MachineType.BaseMachine\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* 施工機種別 */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n\r\n {/* 選択肢 */}\r\n {\r\n props.typeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )\r\n }\r\n\r\n \r\n\r\n {/* 社番 */}\r\n \r\n\r\n\r\n {/* 型式 */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n\r\n {/* 選択肢 */}\r\n {\r\n props.modelList.map((option) => (\r\n \r\n {option.value}\r\n \r\n ))\r\n }\r\n\r\n \r\n\r\n {/* メーカー */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n\r\n {/* 選択肢 */}\r\n {\r\n props.manufacturerList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )\r\n }\r\n\r\n \r\n\r\n {/* 年式 */}\r\n 今の日付が挿入される為、null代入\r\n onChange={(data) => onChangeDate(data)}\r\n />\r\n\r\n\r\n {/* CTU ありなし */}\r\n \r\n CTUあり/なし\r\n \r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label}\r\n disabled={!checkSelectedBaseMachine(values.type)}\r\n />\r\n ))}\r\n \r\n \r\n\r\n\r\n {/* ボタングループ */}\r\n \r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickAdd()}\r\n />\r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default MachineSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MachineMasterSlice, onExcuteAsync } from '../../../../../modules/slice/machine/machine-slice';\r\nimport { MachineAdapter } from '../../../../../modules/adapter/machine/machine-adapter'\r\n// type\r\nimport { MachineInputItem } from '../../_types';\r\n// component\r\nimport MachineSearchCondition from './MachineSearchCondition';\r\n\r\n/**\r\n * 施工機マスタ 検索エリアを提供します。\r\n * */\r\nexport const MachineSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const typeList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.MachineType);\r\n const modelList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.Model);\r\n const manufacturerList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.Manufacturer);\r\n const ctuIdList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.CtuId);\r\n const maintenanceCtuIdList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.MaintenanceCtuId);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: MachineInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = MachineAdapter.instance.getAsync(\r\n {\r\n // セレクトボックスの 0:未選択 を void 0 に変換\r\n item: {\r\n ...inputItem,\r\n type: inputItem.type === 0 ? void 0 : inputItem.type,\r\n model: inputItem.model === 0 ? void 0 : inputItem.model,\r\n manufacturer: inputItem.manufacturer === 0 ? void 0 : inputItem.manufacturer,\r\n ctuId: void 0,\r\n maintenanceCtuId: void 0,\r\n }\r\n },\r\n {\r\n MachineType: typeList,\r\n Model: modelList,\r\n Manufacturer: manufacturerList,\r\n CtuId: ctuIdList,\r\n MaintenanceCtuId: maintenanceCtuIdList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickAdd = () => {\r\n dispatch(MachineMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n\r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n// type\r\nimport { MachineInputItem, MachineValidateInputItem } from '../../_types';\r\nimport { ConnectedCtuType } from '../../../../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\nimport { MachineType } from '../../../../../modules/swagger-clients';\r\nimport MuiKeybordDatePicker from '../../../../../components/MuiPickers/MuiKeybordDatePicker';\r\nimport { MuiDatePickerUtility } from '../../../../../components/MuiPickers/mui-date-picker-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ラジオボタン入力\r\n inputRadio: {\r\n width: \"250px\",\r\n margin: theme.spacing(1),\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 施工機マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: MachineInputItem,\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 施工機種別一覧を表します。*/\r\n typeList: { key: number, value: string }[],\r\n /** 型式一覧を表します。 */\r\n manufacturerList: { key: number, value: string }[],\r\n /** 型式一覧を表します。 */\r\n modelList: { key: number, value: string }[],\r\n /** CTU 番号一覧を表します。 */\r\n ctuIdList: { key: number, value: string }[],\r\n /** CTU 番号一覧を表します。 */\r\n maintenanceCtuIdList: { key: number, value: string }[],\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof MachineInputItem) => void,\r\n /** 日付入力値の変更処理を表します。 */\r\n onChangeDate: (newValue: Date | null, name: keyof MachineInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: MachineValidateInputItem,\r\n};\r\n\r\n/**\r\n * 施工機マスタ 詳細エリアを提供します。\r\n * */\r\nconst MachineDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n {/* 施工機種別 */}\r\n props.onChange(event, \"type\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.type === false}\r\n helperText={props.validateError.type}\r\n >\r\n {/* 選択肢 */}\r\n {props.typeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 社番 */}\r\n props.onChange(event, \"id\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.id === false}\r\n helperText={props.validateError.id}\r\n />\r\n\r\n {/* 型式 */}\r\n props.onChange(event, \"model\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.model === false}\r\n helperText={props.validateError.model}\r\n >\r\n\r\n {/* 選択肢 */}\r\n {props.modelList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* メーカー */}\r\n props.onChange(event, \"manufacturer\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.manufacturer === false}\r\n helperText={props.validateError.manufacturer}\r\n >\r\n\r\n {/* 選択肢 */}\r\n {props.manufacturerList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 年式 */}\r\n 今の日付が挿入される為、null代入\r\n onChange={(data) => props.onChangeDate(data, \"modelYear\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.modelYear === false}\r\n helperText={props.validateError.modelYear}\r\n />\r\n\r\n {/* CTUあり/なし */}\r\n props.onChange(event, \"connectedCtu\")}\r\n />}\r\n label=\"CTUあり (ベースマシン)\"\r\n />\r\n\r\n {/* CTU番号 */}\r\n props.onChange(event, \"ctuId\")}\r\n disabled={props.initialValues.type !== MachineType.BaseMachine} // ベースマシンのみ選択可能\r\n >\r\n {/* Default */}\r\n {\"未設定\"}\r\n {/* 選択肢 */}\r\n {props.ctuIdList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* CTU番号 */}\r\n props.onChange(event, \"maintenanceCtuId\")}\r\n disabled={props.initialValues.type !== MachineType.BaseMachine} // ベースマシンのみ選択可能\r\n >\r\n {/* Default */}\r\n {\"未設定\"}\r\n {/* 選択肢 */}\r\n {props.maintenanceCtuIdList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MachineDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MachineMasterSlice, onExcuteAsync } from '../../../../../modules/slice/machine/machine-slice';\r\nimport { MachineAdapter } from '../../../../../modules/adapter/machine/machine-adapter'\r\n// type\r\nimport { MachineInputItem, MachineValidateInputItem } from '../../_types';\r\n// component\r\nimport MachineDetailCondition from './MachineDetailCondition'\r\nimport { ConnectedCtuType } from '../../../../../_types';\r\n\r\n\r\n/** ステータス編集ダイアログの State を表示します。 */\r\nexport interface EditDialogState {\r\n /** 施工機種別を表します */\r\n 施工機種別: string,\r\n /** パスワードを表します */\r\n password?: string,\r\n}\r\n\r\n/**\r\n * 施工機マスタ 詳細エリアを提供します。\r\n * */\r\nexport const MachineDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.machineMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.machineMaster.selectedRowItem);\r\n // redux store\r\n const typeList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.MachineType);\r\n const modelList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.Model);\r\n const manufacturerList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.Manufacturer);\r\n const ctuIdList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.CtuId);\r\n const maintenanceCtuIdList = useSelector((state: RootState) => state.machineMaster.selectBoxItem.MaintenanceCtuId);\r\n\r\n const initialValues: MachineInputItem = {\r\n id: selectedItem?.id,\r\n ctuId: selectedItem?.ctuId,\r\n maintenanceCtuId: selectedItem?.maintenanceCtuId,\r\n type: selectedItem?.typeId,\r\n model: selectedItem?.modelId,\r\n manufacturer: selectedItem?.manufacturerId,\r\n modelYear: selectedItem?.modelYear ? new Date(selectedItem?.modelYear) : void 0,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n ctuId: selectedItem?.ctuId,\r\n maintenanceCtuId: selectedItem?.maintenanceCtuId,\r\n type: selectedItem?.typeId,\r\n model: selectedItem?.modelId,\r\n manufacturer: selectedItem?.manufacturerId,\r\n modelYear: selectedItem?.modelYear ? new Date(selectedItem?.modelYear) : void 0,\r\n connectedCtu: selectedItem?.connectedCtu,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof MachineInputItem) => {\r\n // 値を選別\r\n // 型\r\n const input = event as React.ChangeEvent\r\n\r\n const target = event.target;\r\n\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10)\r\n : target.type === \"checkbox\" && name === \"connectedCtu\" ? toConnectedCtu(input.target.checked)\r\n : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /**\r\n * CTUありなし情報に変換します。\r\n * @param value\r\n */\r\n const toConnectedCtu = (value: boolean): ConnectedCtuType => value ? ConnectedCtuType.Connected : ConnectedCtuType.Disconnected;\r\n\r\n\r\n /**\r\n * 日付の変更時の処理を行います。\r\n * @param newValue\r\n */\r\n const onChangeDate = (newValue: Date | null, name: keyof MachineInputItem) => {\r\n\r\n if (newValue != null) {\r\n newValue.setDate(1); // 日付を 1 に設定\r\n newValue.setHours(0, 0, 0, 0); // 時間を ゼロ(00:00:000) に設定\r\n }\r\n\r\n setValues(preValues => (\r\n {\r\n ...preValues,\r\n modelYear: newValue,\r\n }\r\n ))\r\n };\r\n\r\n /** 追加ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MachineAdapter.instance.addAsync(\r\n { item: values },\r\n {\r\n MachineType: typeList,\r\n Model: modelList,\r\n Manufacturer: manufacturerList,\r\n CtuId: ctuIdList,\r\n MaintenanceCtuId: maintenanceCtuIdList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MachineAdapter.instance.updateAsync(\r\n { item: values },\r\n {\r\n MachineType: typeList,\r\n Model: modelList,\r\n Manufacturer: manufacturerList,\r\n CtuId: ctuIdList,\r\n MaintenanceCtuId: maintenanceCtuIdList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(MachineMasterSlice.actions.toggleDialog(true));\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(MachineMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let id = \"\";\r\n let type = \"\";\r\n let model = \"\";\r\n let manufacturer = \"\";\r\n let modelYear = \"\";\r\n\r\n // 施工機種別\r\n if (!values.type) {\r\n type = \"施工機種別を選択してください\";\r\n result = true;\r\n }\r\n\r\n // 社番\r\n if (!values.id) {\r\n id = \"社番を入力してください\";\r\n result = true;\r\n }\r\n\r\n // 型式\r\n if (!values.model) {\r\n model = \"型式を入力してください\";\r\n result = true;\r\n }\r\n\r\n // メーカー\r\n if (!values.manufacturer) {\r\n manufacturer = \"メーカーを選択してください\";\r\n result = true;\r\n }\r\n\r\n // 年式\r\n if (!values.modelYear) {\r\n modelYear = \"年式を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n type,\r\n id,\r\n model,\r\n manufacturer,\r\n modelYear,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { MachineAdapter } from '../../../../../modules/adapter/machine/machine-adapter';\r\nimport { MachineMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/machine/machine-slice';\r\nimport { MachineRequest } from '../../../../../modules/adapter/machine/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.machineMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.machineMaster.selectedRowItem ?? null);\r\n const selectBoxItem = useSelector((state: RootState) => state.machineMaster.selectBoxItem);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: MachineRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n type: selectedItem?.typeId,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, selectBoxItem, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(MachineMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MachineMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/machine/machine-slice';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// component\r\nimport { MachineResultTableContainer } from './components/TableContent/MachineResultTableContainer';\r\nimport { MachineSearchConditionContainer } from './components/SearchContent/MachineSearchConditionContainer';\r\nimport { MachineDetailConditionContainer } from './components/DetailContent/MachineDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * 施工機マスタ画面を提供します。\r\n * */\r\nconst MachinePage: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterMachine.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.machineMaster.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.machineMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.machineMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.machineMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.machineMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MachineMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default MachinePage;\r\n","import { InspectionDivisionListItem, InspectionDivisionInputItem } from '../../../pages/Master/InspectionDivision/_types';\r\nimport { InspectionDivisionRequest, InspectionDivisionSelectBoxItemState } from './types';\r\nimport { InspectionDivisionInput, InspectionDivisionItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `点検区分マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class InspectionDivisionUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(\r\n selectBoxItem: InspectionDivisionSelectBoxItemState,\r\n items?: InspectionDivisionItem[]\r\n ): InspectionDivisionListItem[] {\r\n const result: InspectionDivisionListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null\r\n || source.groupId == null\r\n || source.weight == null\r\n || source.lockVersion == null) {\r\n continue;\r\n }\r\n\r\n // セレクトボックスの名称を取得\r\n const groupItem = selectBoxItem.InspectionGroup.find(_ => _.key === source.groupId);\r\n\r\n const item: InspectionDivisionListItem = {\r\n id: source.id,\r\n name: source.name ?? \"\",\r\n groupId: source.groupId,\r\n groupName: groupItem?.value ?? \"\",\r\n weight: source.weight,\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: InspectionDivisionRequest): InspectionDivisionInput {\r\n const result = new InspectionDivisionInput();\r\n result.init({\r\n item: InspectionDivisionUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: InspectionDivisionInputItem): InspectionDivisionItem {\r\n const result = new InspectionDivisionItem();\r\n result.init({\r\n id: source.id,\r\n name: source.name,\r\n groupId: source.groupId,\r\n weight: source.weight,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { InspectionDivisionClient, InspectionDivisionInput, InspectionDivisionOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { InspectionDivisionRequest, InspectionDivisionResult, InspectionDivisionSelectBoxItemState } from './types';\r\nimport { InspectionDivisionUtility } from './inspection-division-utility';\r\n\r\n/**\r\n * `点検区分マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class InspectionDivisionAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new InspectionDivisionAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): InspectionDivisionResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(\r\n parameter: InspectionDivisionRequest,\r\n selectBoxItem: InspectionDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new InspectionDivisionInput();\r\n input.init(InspectionDivisionUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionDivisionResult = {\r\n isError: false,\r\n items: InspectionDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(\r\n parameter: InspectionDivisionRequest,\r\n selectBoxItem: InspectionDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new InspectionDivisionInput();\r\n input.init(InspectionDivisionUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionDivisionResult = {\r\n isError: false,\r\n items: InspectionDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(\r\n parameter: InspectionDivisionRequest,\r\n selectBoxItem: InspectionDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.groupId == null ? \"点検グループ ID\"\r\n : parameter.item.weight == null ? \"No\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new InspectionDivisionInput();\r\n input.init(InspectionDivisionUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionDivisionResult = {\r\n isError: false,\r\n items: InspectionDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(\r\n parameter: InspectionDivisionRequest,\r\n selectBoxItem: InspectionDivisionSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new InspectionDivisionInput();\r\n input.init(InspectionDivisionUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionDivisionResult = {\r\n isError: false,\r\n items: InspectionDivisionUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new InspectionDivisionClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { InspectionDivisionAdapter } from '../../adapter/inspection-division/inspection-division-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { InspectionDivisionRequest, InspectionDivisionResult, InspectionDivisionSelectBoxItemState } from '../../adapter/inspection-division/types';\r\nimport { InspectionDivisionListItem } from '../../../pages/Master/InspectionDivision/_types';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\nimport { KeyValueItem, InspectionType } from '../../../_types';\r\nimport { ReportResult } from '../../adapter/report/type';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: {\r\n InspectionGroup: [],\r\n },\r\n isDialogOpen: false,\r\n\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const InspectionDivisionSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'InspectionDivision',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(InspectionDivisionSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(InspectionDivisionSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(InspectionDivisionSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(InspectionDivisionSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(InspectionDivisionSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(InspectionDivisionSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(InspectionDivisionSlice.actions.resetState());\r\n\r\n // 処理中 ON\r\n dispatch(InspectionDivisionSlice.actions.fetchStart());\r\n\r\n // 点検グループ\r\n const inspectionGroupResult = await SharedAdapter.instance.getInspectionGroupAsync();\r\n\r\n // 異常確認\r\n if (inspectionGroupResult.isError) {\r\n // 施工機種別 異常メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(`点検グループ取得エラー:${inspectionGroupResult.errorMessage}`));\r\n\r\n } else {\r\n // 正常\r\n // リストの項目を store に保存\r\n dispatch(InspectionDivisionSlice.actions.getSelectBoxItem({\r\n InspectionGroup: inspectionGroupResult.items,\r\n }));\r\n\r\n // データ取得\r\n const result = await InspectionDivisionAdapter.instance.getAsync(\r\n { item: {} },\r\n { InspectionGroup: inspectionGroupResult.items }\r\n );\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(InspectionDivisionSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(InspectionDivisionSlice.actions.fetchSuccess(result));\r\n\r\n dispatch(InspectionDivisionSlice.actions.toggleDialog(false));\r\n\r\n // 正常メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showSuccessMessage());\r\n\r\n\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(InspectionDivisionSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: InspectionDivisionRequest,\r\n selectBoxItem: InspectionDivisionSelectBoxItemState,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(InspectionDivisionSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await InspectionDivisionAdapter.instance.removeAsync(parameter, selectBoxItem);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(InspectionDivisionSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(InspectionDivisionSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(InspectionDivisionSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(InspectionDivisionSlice.actions.clearSelectedItem());\r\n\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(InspectionDivisionSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 点検票プレビュー情報を取得します。\r\n * @param type 点検種別を指定します。\r\n */\r\nexport const getIncspectionPreviewReportAsync = (type: InspectionType) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(InspectionDivisionSlice.actions.fetchStart());\r\n dispatch(InspectionDivisionSlice.actions.changeReportLoadingFlag(true));\r\n dispatch(InspectionDivisionSlice.actions.updatePreviewReport(\"\"));\r\n\r\n let result: ReportResult;\r\n\r\n // 通信処理\r\n // 日常\r\n if (type === InspectionType.Daily) {\r\n result = await ReportAdapter.instance.getDailyPreviewReport();\r\n\r\n }\r\n // 週間月例\r\n else if (type === InspectionType.Weekly) {\r\n result = await ReportAdapter.instance.getWeeklyPreviewReport();\r\n\r\n }\r\n // 現場完了\r\n else if (type === InspectionType.Completion) {\r\n result = await ReportAdapter.instance.getCompletionPreviewReport();\r\n\r\n } else {\r\n // 例外\r\n throw new Error(\"type\");\r\n }\r\n\r\n // 異常確認\r\n if (result.isError || !result.reportUrl) {\r\n // 異常メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(`帳票プレビュー情報 取得エラー:${result.errorMessage}`));\r\n dispatch(InspectionDivisionSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showSuccessMessage());\r\n dispatch(InspectionDivisionSlice.actions.updatePreviewReport(result.reportUrl));\r\n\r\n }\r\n\r\n } catch (error) {\r\n // メッセージ\r\n dispatch(InspectionDivisionSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(InspectionDivisionSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(InspectionDivisionSlice.actions.fetchEnd());\r\n\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { InspectionDivisionListItem } from \"../../_types\"\r\n\r\n/** 点検区分マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: InspectionDivisionListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: InspectionDivisionListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: InspectionDivisionListItem,\r\n}\r\n\r\n/** 点検区分マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: InspectionDivisionListItem,\r\n}\r\n\r\n/** 点検区分マスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"点検グループ\", field: \"groupName\" },\r\n { title: \"No.\", field: \"weight\", width: 200 },\r\n { title: \"点検区分\", field: \"name\" },\r\n];\r\n\r\n/** 整備区分マスタテーブルを提供します */\r\nconst InspectionDivisionResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: void 0,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: InspectionDivisionListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default InspectionDivisionResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { InspectionDivisionSlice } from '../../../../../modules/slice/inspection-division/inspection-division-slice';\r\n// type\r\nimport { InspectionDivisionListItem } from '../../_types';\r\n// component\r\nimport InspectionDivisionTable from './InspectionDivisionResultTable'\r\n\r\n/** 点検区分マスタテーブルを提供します */\r\nexport const InspectionDivisionResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: InspectionDivisionListItem[] = useSelector((state: RootState) => state.inspectionDivisionMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.inspectionDivisionMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: InspectionDivisionListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(InspectionDivisionSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport { Drawer, Backdrop, IconButton, FormControl, FormLabel, RadioGroup, FormControlLabel, Radio } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { InspectionType } from '../../../../../_types';\r\nimport MuiPreviewButton from '../../../../../components/Buttons/MuiPreviewButton';\r\nimport { ActiveReportViewer } from '../../../../../components/ActiveReportViewer/ActiveReportViewer';\r\n\r\n/** 点検票プレビュードロワーの Prsop を提供します。 */\r\ninterface Props {\r\n /** レポートの url を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport: () => void,\r\n /** プレビューボタンクリック時の処理を表します。 */\r\n onClickPreview: (type: InspectionType) => void,\r\n}\r\n\r\n/** ラジオボタンリスト */\r\nconst radioButtons = [\r\n { key: InspectionType.Daily, label: \"日常\" },\r\n { key: InspectionType.Weekly, label: \"週間月例\" },\r\n { key: InspectionType.Completion, label: \"現場完了\" },\r\n];\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: 150,\r\n margin: \"1rem\",\r\n },\r\n // バックドロップ\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer - 1,\r\n color: '#fff',\r\n },\r\n // ビューワ\r\n viewer: {\r\n width: \"65vw\",\r\n height: \"100%\",\r\n },\r\n // ドロワーのコンテナ\r\n drawerPaper: {\r\n overflowY: \"unset\",\r\n },\r\n // ドロワー閉じるボタン\r\n closeButton: {\r\n position: \"absolute\",\r\n left: -50,\r\n },\r\n // ラジオボタングループ\r\n radioGroup: {\r\n margin: theme.spacing(1, 1, 0, 1),\r\n },\r\n // ラジオボタングループラベル\r\n radioGroupLabel: {\r\n marginBottom: 0,\r\n },\r\n // ラジオボタングループ\r\n radioGroupButton: {\r\n flexDirection: \"row\"\r\n },\r\n }),\r\n);\r\n\r\n/**\r\n * 帳票プレビュードロワー を表示します。\r\n */\r\nexport function InspectionPreviewDrawer(props: Props) {\r\n\r\n\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n const [selectedType, setSelectedType] = useState(InspectionType.Daily);\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n /** ドロワーを開きます。 */\r\n const openDrawer = () => {\r\n props.onClickPreview(selectedType);\r\n setIsOpen(true)\r\n if (document.body) document.body.classList.add(\"body-scrolllock\");\r\n }\r\n\r\n /** ドロワーを閉じます。 */\r\n const cloaseDrawer = () => {\r\n setIsOpen(false)\r\n if (document.body) document.body.classList.remove(\"body-scrolllock\");\r\n }\r\n\r\n /**\r\n * ラジオボタンの選択処理を行います。\r\n * @param event\r\n */\r\n const handleChange = (event: React.ChangeEvent) => {\r\n setSelectedType(parseInt((event.target as HTMLInputElement).value));\r\n };\r\n\r\n return (\r\n <>\r\n {/* ラジオボタン */}\r\n \r\n 点検表\r\n \r\n {radioButtons.map((value) => (\r\n }\r\n label={value.label}\r\n />\r\n ))}\r\n \r\n \r\n\r\n \r\n プレビュー\r\n \r\n\r\n\r\n {/* Drawer の variant=\"temporary\" だと、JSViewerの印刷モーダルが表示されないので、\"persistent\" にして、背面の無効化を手動で設置 */}\r\n \r\n\r\n {/* Drawer */}\r\n \r\n {/* close button */}\r\n \r\n \r\n \r\n\r\n {/* JSビューワ*/}\r\n
\r\n {!!props.reportUrl && (\r\n \r\n )}\r\n
\r\n \r\n\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { InspectionDivisionInputItem } from '../../_types';\r\nimport { KeyValueItem, InspectionType } from '../../../../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\nimport { InspectionPreviewDrawer } from '../../../Shared/components/ViewerDrawer/InspectionPreviewDrawer';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // ボタン グループ\r\n buttonGroup: {\r\n marginRight: \"auto\",\r\n },\r\n }),\r\n);\r\n\r\n/** 点検区分マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: InspectionDivisionInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n /** 点検グループ一覧を表します。*/\r\n groupList: KeyValueItem[],\r\n /** プレビューボタンのクリック処理を行います。 */\r\n onClickPreview: ((type: InspectionType) => void),\r\n /** 帳票 URL を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport: () => void,\r\n};\r\n\r\n/**\r\n * 点検区分マスタ 検索エリアを提供します。\r\n * */\r\nconst InspectionDivisionSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof InspectionDivisionInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n\r\n {/* 点検グループ */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n\r\n {/* 選択肢 */}\r\n {props.groupList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 点検区分 */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n
\r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n
\r\n\r\n {/* プレビュー */}\r\n \r\n\r\n
\r\n\r\n
\r\n );\r\n};\r\n\r\nexport default InspectionDivisionSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { InspectionDivisionSlice, onExcuteAsync, getIncspectionPreviewReportAsync } from '../../../../../modules/slice/inspection-division/inspection-division-slice';\r\nimport { InspectionDivisionAdapter } from '../../../../../modules/adapter/inspection-division/inspection-division-adapter'\r\n// type\r\nimport { InspectionDivisionInputItem } from '../../_types';\r\nimport { KeyValueItem, InspectionType } from '../../../../../_types';\r\n// component\r\nimport InspectionDivisionSearchCondition from './InspectionDivisionSearchCondition';\r\n\r\n/**\r\n * 点検区分マスタ 検索エリアを提供します。\r\n * */\r\nexport const InspectionDivisionSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const groupList = useSelector((state: RootState) => state.inspectionDivisionMaster.selectBoxItem.InspectionGroup);\r\n const reportUrl: string = useSelector((state: RootState) => state.inspectionDivisionMaster.reportUrl ?? \"\");\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: InspectionDivisionInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = InspectionDivisionAdapter.instance.getAsync(\r\n {\r\n // セレクトボックスの 0:未選択 を void 0 に変換\r\n item: {\r\n ...inputItem,\r\n groupId: inputItem.groupId === 0 ? void 0 : inputItem.groupId,\r\n }\r\n },\r\n {\r\n InspectionGroup: groupList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(InspectionDivisionSlice.actions.chageCreating(true))\r\n }\r\n\r\n /** 帳票ボタンのクリック処理を行います。 */\r\n const onClickPreview = (type: InspectionType) => {\r\n dispatch(getIncspectionPreviewReportAsync(type));\r\n }\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(InspectionDivisionSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { InspectionDivisionInputItem, InspectionDivisionValidateInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // テキストエリア\r\n textarea: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 点検区分マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: InspectionDivisionInputItem,\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 点検グループ一覧を表します。*/\r\n groupList: KeyValueItem[],\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof InspectionDivisionInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: InspectionDivisionValidateInputItem,\r\n\r\n};\r\n\r\n/**\r\n * 点検区分マスタ 詳細エリアを提供します。\r\n * */\r\nconst InspectionDivisionDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n {/* 点検グループ */}\r\n props.onChange(event, \"groupId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.inspectionGroup === false}\r\n helperText={props.validateError.inspectionGroup}\r\n >\r\n\r\n {/* 選択肢 */}\r\n {props.groupList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 重み */}\r\n props.onChange(event, \"weight\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n required\r\n error={!props.validateError.weight === false}\r\n helperText={props.validateError.weight}\r\n />\r\n\r\n {/* 点検区分名 */}\r\n props.onChange(event, \"name\")}\r\n required\r\n error={!props.validateError.inspectionDivision === false}\r\n helperText={props.validateError.inspectionDivision}\r\n />\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default InspectionDivisionDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { InspectionDivisionSlice, onExcuteAsync } from '../../../../../modules/slice/inspection-division/inspection-division-slice';\r\nimport { InspectionDivisionAdapter } from '../../../../../modules/adapter/inspection-division/inspection-division-adapter'\r\n// type\r\nimport { InspectionDivisionInputItem, InspectionDivisionValidateInputItem } from '../../_types';\r\n// component\r\nimport InspectionDivisionDetailCondition from './InspectionDivisionDetailCondition'\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/**\r\n * 点検区分マスタ 詳細エリアを提供します。\r\n * */\r\nexport const InspectionDivisionDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.inspectionDivisionMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.inspectionDivisionMaster.selectedRowItem);\r\n const groupList = useSelector((state: RootState) => state.inspectionDivisionMaster.selectBoxItem.InspectionGroup);\r\n\r\n const initialValues: InspectionDivisionInputItem = {\r\n id: selectedItem?.id,\r\n groupId: selectedItem?.groupId,\r\n name: selectedItem?.name,\r\n weight: selectedItem?.weight,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n groupId: selectedItem?.groupId,\r\n name: selectedItem?.name,\r\n weight: selectedItem?.weight,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof InspectionDivisionInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? MuiTextFieldUtility.LimitationNumber(Number.parseInt(target.value, 10)) : target.value;\r\n\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = InspectionDivisionAdapter.instance.addAsync(\r\n { item: values },\r\n {\r\n InspectionGroup: groupList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = InspectionDivisionAdapter.instance.updateAsync(\r\n { item: values },\r\n {\r\n InspectionGroup: groupList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(InspectionDivisionSlice.actions.toggleDialog(true));\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = () => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(InspectionDivisionSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let inspectionGroup = \"\";\r\n let inspectionDivision = \"\";\r\n let weight = \"\";\r\n\r\n // 点検グループ\r\n if (!values.groupId) {\r\n inspectionGroup = \"点検グループを選択してください\";\r\n result = true;\r\n }\r\n\r\n // 重み\r\n if (values.weight == null) {\r\n weight = \"No.を入力してください\";\r\n result = true;\r\n }\r\n\r\n // 点検区分\r\n if (!values.name) {\r\n inspectionDivision = \"点検区分を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n inspectionGroup,\r\n inspectionDivision,\r\n weight,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { InspectionDivisionAdapter } from '../../../../../modules/adapter/inspection-division/inspection-division-adapter';\r\nimport { InspectionDivisionSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/inspection-division/inspection-division-slice';\r\nimport { InspectionDivisionRequest } from '../../../../../modules/adapter/inspection-division/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.inspectionDivisionMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.inspectionDivisionMaster.selectedRowItem ?? null);\r\n const selectBoxItem = useSelector((state: RootState) => state.inspectionDivisionMaster.selectBoxItem);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: InspectionDivisionRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n groupId: selectedItem?.groupId,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n };\r\n \r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, selectBoxItem, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(InspectionDivisionSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { InspectionDivisionSlice, onExcuteMountedAsync } from '../../../modules/slice/inspection-division/inspection-division-slice';\r\n// component\r\nimport { InspectionDivisionResultTableContainer } from './components/TableContent/InspectionDivisionResultTableContainer';\r\nimport { InspectionDivisionSearchConditionContainer } from './components/SearchContent/InspectionDivisionSearchConditionContainer';\r\nimport { InspectionDivisionDetailConditionContainer } from './components/DetailContent/InspectionDivisionDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\n\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * 点検区分マスタ画面を提供します。\r\n * */\r\nconst InspectionDivisionPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterInspectionDivision.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.inspectionDivisionMaster.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.inspectionDivisionMaster.isReportLoading ?? false);\r\n const isShowMessage = useSelector((state: RootState) => state.inspectionDivisionMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.inspectionDivisionMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.inspectionDivisionMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.inspectionDivisionMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(InspectionDivisionSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default InspectionDivisionPage;\r\n","import { InspectionItemListItem, InspectionItemInputItem } from '../../../pages/Master/InspectionItem/_types';\r\nimport { InspectionItemRequest, InspectionItemMasterSelectBoxItemState } from './types';\r\nimport { InspectionItemInput, InspectionItemItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `点検項目マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class InspectionItemUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(\r\n selectBoxItem: InspectionItemMasterSelectBoxItemState,\r\n items?: InspectionItemItem[],\r\n ): InspectionItemListItem[] {\r\n const result: InspectionItemListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null\r\n || source.groupTypeId == null\r\n || source.divisionId == null\r\n || source.weight == null\r\n || source.lockVersion == null) {\r\n continue;\r\n }\r\n\r\n // セレクトボックスの名称を取得\r\n const groupItem = selectBoxItem.InspectionGroup.find(_ => _.key === source.groupTypeId);\r\n const divisionList = selectBoxItem.InspectionDivision.find(_ => _.key === source.groupTypeId);\r\n const divisionItem = divisionList?.value.find(_ => _.key === source.divisionId) ?? void 0;\r\n\r\n const item: InspectionItemListItem = {\r\n id: source.id,\r\n name: source.name ?? \"\",\r\n inspectionDivisionId: source.divisionId,\r\n inspectionDivisionName: divisionItem?.value ?? \"\",\r\n inspectionGroupId: source.groupTypeId,\r\n inspectionGroupName: groupItem?.value ?? \"\",\r\n weight: source.weight,\r\n unit: source.unit ?? \"\",\r\n inputLowerLimit: source.inputLowerLimit ?? \"\",\r\n inputHigherLimit: source.inputHigherLimit ?? \"\",\r\n lightAlarmLowerLimit: source.lightAlarmLowerLimit ?? \"\",\r\n lightAlarmHigherLimit: source.lightAlarmHigherLimit ?? \"\",\r\n heavyAlarmLowerLimit: source.heavyAlarmLowerLimit ?? \"\",\r\n heavyAlarmHigherLimit: source.heavyAlarmHigherLimit ?? \"\",\r\n remarks: source.remarks ?? \"\",\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: InspectionItemRequest): InspectionItemInput {\r\n const result = new InspectionItemInput();\r\n result.init({\r\n item: InspectionItemUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: InspectionItemInputItem): InspectionItemItem {\r\n const result = new InspectionItemItem();\r\n result.init({\r\n id: source.id,\r\n divisionId: source.inspectionDivisionId,\r\n groupTypeId: source.inspectionGroupId,\r\n name: source.name,\r\n weight: source.weight,\r\n unit: source.unit,\r\n inputLowerLimit: source.inputLowerLimit == null ? void 0 : source.inputLowerLimit.toString(),\r\n inputHigherLimit: source.inputHigherLimit == null ? void 0 : source.inputHigherLimit.toString(),\r\n lightAlarmLowerLimit: source.lightAlarmLowerLimit == null ? void 0 : source.lightAlarmLowerLimit.toString(),\r\n lightAlarmHigherLimit: source.lightAlarmHigherLimit == null ? void 0 : source.lightAlarmHigherLimit.toString(),\r\n heavyAlarmLowerLimit: source.heavyAlarmLowerLimit == null ? void 0 : source.heavyAlarmLowerLimit.toString(),\r\n heavyAlarmHigherLimit: source.heavyAlarmHigherLimit == null ? void 0 : source.heavyAlarmHigherLimit.toString(),\r\n remarks: source.remarks,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { InspectionItemClient, InspectionItemInput, InspectionItemOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { InspectionItemRequest, InspectionItemResult, InspectionItemMasterSelectBoxItemState } from './types';\r\nimport { InspectionItemUtility } from './inspection-item-utility';\r\n\r\n/**\r\n * `点検項目マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class InspectionItemAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new InspectionItemAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): InspectionItemResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(\r\n parameter: InspectionItemRequest,\r\n selectBoxItem: InspectionItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new InspectionItemInput();\r\n input.init(InspectionItemUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionItemResult = {\r\n isError: false,\r\n items: InspectionItemUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(\r\n parameter: InspectionItemRequest,\r\n selectBoxItem: InspectionItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new InspectionItemInput();\r\n input.init(InspectionItemUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionItemResult = {\r\n isError: false,\r\n items: InspectionItemUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(\r\n parameter: InspectionItemRequest,\r\n selectBoxItem: InspectionItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.inspectionDivisionId == null ? \"点検区分 ID\"\r\n : parameter.item.inspectionGroupId == null ? \"点検グループ ID\"\r\n : parameter.item.weight == null ? \"No\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new InspectionItemInput();\r\n input.init(InspectionItemUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionItemResult = {\r\n isError: false,\r\n items: InspectionItemUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(\r\n parameter: InspectionItemRequest,\r\n selectBoxItem: InspectionItemMasterSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new InspectionItemInput();\r\n input.init(InspectionItemUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: InspectionItemResult = {\r\n isError: false,\r\n items: InspectionItemUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new InspectionItemClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { InspectionItemAdapter } from '../../adapter/inspection-item/inspection-item-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { InspectionItemResult, InspectionItemMasterSelectBoxItemState, InspectionItemRequest } from '../../adapter/inspection-item/types';\r\nimport { InspectionItemListItem } from '../../../pages/Master/InspectionItem/_types';\r\nimport { ReportAdapter } from '../../adapter/report/report-adapter';\r\nimport { KeyValueItem, InspectionType } from '../../../_types';\r\nimport { ReportResult } from '../../adapter/report/type';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: {\r\n InspectionGroup: [],\r\n InspectionDivision: [],\r\n },\r\n isDialogOpen: false,\r\n\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const InspectionItemMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'InspectionItem',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(InspectionItemMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(InspectionItemMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(InspectionItemMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(InspectionItemMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(InspectionItemMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(InspectionItemMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(InspectionItemMasterSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(InspectionItemMasterSlice.actions.fetchStart());\r\n\r\n // 点検グループ\r\n const inspectionGroupWaiter = SharedAdapter.instance.getInspectionGroupAsync();\r\n // 点検項目\r\n const inspectionDivisionWaiter = SharedAdapter.instance.getInspectionDivisionAsync();\r\n\r\n //まとめて取得\r\n const selectBoxresult = await Promise.all([inspectionGroupWaiter, inspectionDivisionWaiter]) // 直接配列に渡したらエラーなる\r\n const inspectionGroupResult = selectBoxresult[0];\r\n const inspectionDivisionResult = selectBoxresult[1];\r\n\r\n // 異常確認\r\n if (inspectionGroupResult.isError) {\r\n // 異常メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`点検グループ別取得エラー:${inspectionGroupResult.errorMessage}`));\r\n\r\n } else if (inspectionDivisionResult.isError) {\r\n // 異常メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`点検区分取得エラー:${inspectionDivisionResult.errorMessage}`));\r\n\r\n } else {\r\n // 正常\r\n // リストの項目を store に保存\r\n dispatch(InspectionItemMasterSlice.actions.getSelectBoxItem({\r\n InspectionGroup: inspectionGroupResult.items,\r\n InspectionDivision: inspectionDivisionResult.items,\r\n }));\r\n\r\n // データ取得\r\n const result = await InspectionItemAdapter.instance.getAsync(\r\n { item: {} },\r\n {\r\n InspectionGroup: inspectionGroupResult.items,\r\n InspectionDivision: inspectionDivisionResult.items,\r\n }\r\n );\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(InspectionItemMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(InspectionItemMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showSuccessMessage());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(InspectionItemMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: InspectionItemRequest,\r\n selectBoxItem: InspectionItemMasterSelectBoxItemState,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(InspectionItemMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await InspectionItemAdapter.instance.removeAsync(parameter, selectBoxItem);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(InspectionItemMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(InspectionItemMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(InspectionItemMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(InspectionItemMasterSlice.actions.clearSelectedItem());\r\n\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(InspectionItemMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 点検票プレビュー情報を取得します。\r\n * @param type 点検種別を指定します。\r\n */\r\nexport const getIncspectionPreviewReportAsync = (type: InspectionType) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(InspectionItemMasterSlice.actions.fetchStart());\r\n dispatch(InspectionItemMasterSlice.actions.changeReportLoadingFlag(true));\r\n dispatch(InspectionItemMasterSlice.actions.updatePreviewReport(\"\"));\r\n\r\n let result: ReportResult;\r\n\r\n // 通信処理\r\n // 日常\r\n if (type === InspectionType.Daily) {\r\n result = await ReportAdapter.instance.getDailyPreviewReport();\r\n\r\n }\r\n // 週間月例\r\n else if (type === InspectionType.Weekly) {\r\n result = await ReportAdapter.instance.getWeeklyPreviewReport();\r\n\r\n }\r\n // 現場完了\r\n else if (type === InspectionType.Completion) {\r\n result = await ReportAdapter.instance.getCompletionPreviewReport();\r\n\r\n } else {\r\n // 例外\r\n throw new Error(\"type\");\r\n }\r\n\r\n // 異常確認\r\n if (result.isError || !result.reportUrl) {\r\n // 異常メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`帳票プレビュー情報 取得エラー:${result.errorMessage}`));\r\n dispatch(InspectionItemMasterSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } else {\r\n // 正常\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showSuccessMessage());\r\n dispatch(InspectionItemMasterSlice.actions.updatePreviewReport(result.reportUrl));\r\n\r\n }\r\n\r\n } catch (error) {\r\n // メッセージ\r\n dispatch(InspectionItemMasterSlice.actions.showErrorMessage(`${error}`));\r\n dispatch(InspectionItemMasterSlice.actions.changeReportLoadingFlag(false));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(InspectionItemMasterSlice.actions.fetchEnd());\r\n\r\n }\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { InspectionItemListItem } from '../../_types';\r\n\r\n/** 点検項目マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: InspectionItemListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: InspectionItemListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: InspectionItemListItem,\r\n}\r\n\r\n/** 点検項目マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: InspectionItemListItem,\r\n}\r\n\r\n/** 点検項目マスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"点検グループ\", field: \"inspectionGroupName\" },\r\n { title: \"点検区分\", field: \"inspectionDivisionName\" },\r\n { title: \"No.\", field: \"weight\" },\r\n { title: \"点検項目\", field: \"name\" },\r\n { title: \"単位\", field: \"unit\" },\r\n { title: \"入力値下限\", field: \"inputLowerLimit\" },\r\n { title: \"入力値上限\", field: \"inputHigherLimit\" },\r\n { title: \"軽アラーム下限\", field: \"lightAlarmLowerLimit\" },\r\n { title: \"軽アラーム上限\", field: \"lightAlarmHigherLimit\" },\r\n { title: \"重アラーム下限\", field: \"heavyAlarmLowerLimit\" },\r\n { title: \"重アラーム上限\", field: \"heavyAlarmHigherLimit\" },\r\n { title: \"備考\", field: \"remarks\" },\r\n];\r\n\r\n/** 点検項目マスタテーブルを提供します */\r\nconst InspectionItemResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: undefined,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow]);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: InspectionItemListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default InspectionItemResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { InspectionItemMasterSlice } from '../../../../../modules/slice/inspection-item/inspection-item-slice';\r\n// type\r\nimport { InspectionItemListItem } from '../../_types';\r\n// component\r\nimport InspectionItemResultTable from './InspectionItemResultTable'\r\n\r\n/** 点検項目マスタテーブルを提供します */\r\nexport const InspectionItemResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: InspectionItemListItem[] = useSelector((state: RootState) => state.inspectionItemMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.inspectionItemMaster.selectedRowItem);\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: InspectionItemListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(InspectionItemMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { InspectionItemInputItem } from '../../_types';\r\nimport { KeyValueItem, InspectionType } from '../../../../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\nimport { InspectionPreviewDrawer } from '../../../Shared/components/ViewerDrawer/InspectionPreviewDrawer';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // ボタン グループ\r\n buttonGroup: {\r\n marginRight: \"auto\",\r\n },\r\n }),\r\n);\r\n\r\n/** 点検項目マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: InspectionItemInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n /** 点検グループ一覧を表します。*/\r\n inspectionGroupList: KeyValueItem[],\r\n /** 点検区分一覧を表します。 */\r\n inspectionDivisionList: KeyValueItem[]>[],\r\n /** プレビューボタンのクリック処理を行います。 */\r\n onClickPreview: ((type: InspectionType) => void),\r\n /** 帳票 URL を表します。 */\r\n reportUrl: string,\r\n /** レポート読み込み終了時の処理を行います。 */\r\n loadedReport: () => void,\r\n};\r\n\r\n/**\r\n * 点検項目マスタ 検索エリアを提供します。\r\n * */\r\nconst InspectionItemSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n const [selectData, setSelectData] = useState<{ key: number, value: string }[]>([]);\r\n\r\n /** 連動したセレクトボックスの変更を行います */\r\n const onChangeSelectBox = (name: keyof InspectionItemInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.value;\r\n\r\n const index = Number.parseInt(value, 10);\r\n const option = props.inspectionDivisionList.find(item => item.key === index);\r\n\r\n // 入力項目更新\r\n setValues({\r\n ...values,\r\n [name]: value,\r\n inspectionDivisionId: void 0,\r\n });\r\n\r\n // 連動したセレクトボックス更新\r\n setSelectData(option?.value ?? []);\r\n }\r\n\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof InspectionItemInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n\r\n {/* 点検グループ */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n {/* 選択肢 */}\r\n {props.inspectionGroupList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n\r\n\r\n {/* 点検区分 */}\r\n \r\n {/* Default */}\r\n {\"未指定\"}\r\n {/* 選択肢 */}\r\n {selectData && selectData.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 点検項目名 */}\r\n \r\n\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n
\r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n
\r\n\r\n {/* プレビュー */}\r\n \r\n\r\n
\r\n\r\n
\r\n\r\n );\r\n};\r\n\r\nexport default InspectionItemSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { InspectionItemMasterSlice, onExcuteAsync, getIncspectionPreviewReportAsync } from '../../../../../modules/slice/inspection-item/inspection-item-slice';\r\nimport { InspectionItemAdapter } from '../../../../../modules/adapter/inspection-item/inspection-item-adapter'\r\n// type\r\nimport { InspectionItemInputItem } from '../../_types';\r\nimport { KeyValueItem, InspectionType } from '../../../../../_types';\r\n// component\r\nimport InspectionItemSearchCondition from './InspectionItemSearchCondition';\r\n\r\n/**\r\n * 点検項目マスタ 検索エリアを提供します。\r\n * */\r\nexport const InspectionItemSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const inspectionGroupList = useSelector((state: RootState) => state.inspectionItemMaster.selectBoxItem.InspectionGroup);\r\n const inspectionDivisionList = useSelector((state: RootState) => state.inspectionItemMaster.selectBoxItem.InspectionDivision);\r\n const reportUrl: string = useSelector((state: RootState) => state.inspectionItemMaster.reportUrl ?? \"\");\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: InspectionItemInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = InspectionItemAdapter.instance.getAsync(\r\n {\r\n // セレクトボックスの 0:未選択 を void 0 に変換\r\n item: {\r\n ...inputItem,\r\n inspectionGroupId: inputItem.inspectionGroupId === 0 ? void 0 : inputItem.inspectionGroupId,\r\n inspectionDivisionId: inputItem.inspectionDivisionId === 0 ? void 0 : inputItem.inspectionDivisionId,\r\n }\r\n },\r\n {\r\n InspectionGroup: inspectionGroupList,\r\n InspectionDivision: inspectionDivisionList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(InspectionItemMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n /** 帳票ボタンのクリック処理を行います。 */\r\n const onClickPreview = (type: InspectionType) => {\r\n dispatch(getIncspectionPreviewReportAsync(type));\r\n }\r\n\r\n /** レポート読み込み完了時の処理を行います。 */\r\n const loadedReport = () => {\r\n dispatch(InspectionItemMasterSlice.actions.changeReportLoadingFlag(false));\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { InspectionItemInputItem, InspectionItemValidateInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n // 行コンテナ\r\n rowContainer: {\r\n display: \"flex\",\r\n },\r\n // テキストエリア\r\n textarea: {\r\n width: \"100% !important\",\r\n },\r\n // テキストエリア\r\n inputItem: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 点検項目マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: InspectionItemInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 点検グループ一覧を表します。*/\r\n inspectionGroupList: KeyValueItem[],\r\n /** 点検区分一覧を表します。 */\r\n inspectionDivisionList: KeyValueItem[],\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof InspectionItemInputItem) => void,\r\n /** 連動セレクトボックスの入力値の変更処理を表します。 */\r\n onChangeSelectBox: (event: React.ChangeEvent, name: keyof InspectionItemInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: InspectionItemValidateInputItem,\r\n};\r\n\r\n/**\r\n * 点検項目マスタ 詳細エリアを提供します。\r\n * */\r\nconst InspectionItemDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n
\r\n\r\n {/* 点検グループ */}\r\n props.onChangeSelectBox(event, \"inspectionGroupId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.inspectionGroup === false}\r\n helperText={props.validateError.inspectionGroup}\r\n >\r\n {/* 選択肢 */}\r\n {props.inspectionGroupList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 点検区分 */}\r\n props.onChange(event, \"inspectionDivisionId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.inspectionDivision === false}\r\n helperText={props.validateError.inspectionDivision}\r\n >\r\n {/* 選択肢 */}\r\n {props.inspectionDivisionList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 重み */}\r\n props.onChange(event, \"weight\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n required\r\n error={!props.validateError.weight === false}\r\n helperText={props.validateError.weight}\r\n />\r\n\r\n {/* 点検項目名 */}\r\n props.onChange(event, \"name\")}\r\n className={classes.inputItem}\r\n required\r\n error={!props.validateError.inspectionItem === false}\r\n helperText={props.validateError.inspectionItem}\r\n />\r\n\r\n {/* 単位 */}\r\n props.onChange(event, \"unit\")}\r\n />\r\n
\r\n
\r\n {/* 入力値下限 */}\r\n props.onChange(event, \"inputLowerLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 入力値上限 */}\r\n props.onChange(event, \"inputHigherLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値軽アラーム下限 */}\r\n props.onChange(event, \"lightAlarmLowerLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値軽アラーム上限 */}\r\n props.onChange(event, \"lightAlarmHigherLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値重アラーム下限 */}\r\n props.onChange(event, \"heavyAlarmLowerLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n\r\n {/* 基準値重アラーム上限 */}\r\n props.onChange(event, \"heavyAlarmHigherLimit\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n />\r\n
\r\n
\r\n {/* 備考 */}\r\n props.onChange(event, \"remarks\")} />\r\n
\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default InspectionItemDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { InspectionItemMasterSlice, onExcuteAsync } from '../../../../../modules/slice/inspection-item/inspection-item-slice';\r\nimport { InspectionItemAdapter } from '../../../../../modules/adapter/inspection-item/inspection-item-adapter'\r\n// type\r\nimport { InspectionItemInputItem, InspectionItemValidateInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport InspectionItemDetailCondition from './InspectionItemDetailCondition'\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/**\r\n * 点検項目マスタ 詳細エリアを提供します。\r\n * */\r\nexport const InspectionItemDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.inspectionItemMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.inspectionItemMaster.selectedRowItem);\r\n const inspectionGroupList = useSelector((state: RootState) => state.inspectionItemMaster.selectBoxItem.InspectionGroup);\r\n const inspectionDivisionList = useSelector((state: RootState) => state.inspectionItemMaster.selectBoxItem.InspectionDivision);\r\n\r\n const initialValues: InspectionItemInputItem = {\r\n id: selectedItem?.id,\r\n name: selectedItem?.name,\r\n inspectionDivisionId: selectedItem?.inspectionDivisionId,\r\n inspectionGroupId: selectedItem?.inspectionGroupId,\r\n weight: selectedItem?.weight,\r\n unit: selectedItem?.unit,\r\n inputLowerLimit: selectedItem?.inputLowerLimit ? Number.parseInt(selectedItem.inputLowerLimit, 10) : void 0,\r\n inputHigherLimit: selectedItem?.inputHigherLimit ? Number.parseInt(selectedItem.inputHigherLimit, 10) : void 0,\r\n lightAlarmLowerLimit: selectedItem?.lightAlarmLowerLimit ? Number.parseInt(selectedItem.lightAlarmLowerLimit, 10) : void 0,\r\n lightAlarmHigherLimit: selectedItem?.lightAlarmHigherLimit ? Number.parseInt(selectedItem.lightAlarmHigherLimit, 10) : void 0,\r\n heavyAlarmLowerLimit: selectedItem?.heavyAlarmLowerLimit ? Number.parseInt(selectedItem.heavyAlarmLowerLimit, 10) : void 0,\r\n heavyAlarmHigherLimit: selectedItem?.heavyAlarmHigherLimit ? Number.parseInt(selectedItem.heavyAlarmHigherLimit, 10) : void 0,\r\n remarks: selectedItem?.remarks,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** 点検区分セレクトボックス値を表します。 */\r\n const [selectData, setSelectData] = useState[]>([]);\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n\r\n setValues((preValue) => ({\r\n id: selectedItem?.id,\r\n name: selectedItem?.name,\r\n inspectionDivisionId: selectedItem?.inspectionDivisionId,\r\n inspectionGroupId: selectedItem?.inspectionGroupId,\r\n weight: selectedItem?.weight,\r\n unit: selectedItem?.unit,\r\n inputLowerLimit: selectedItem?.inputLowerLimit ? Number.parseInt(selectedItem.inputLowerLimit, 10) : void 0,\r\n inputHigherLimit: selectedItem?.inputHigherLimit ? Number.parseInt(selectedItem.inputHigherLimit, 10) : void 0,\r\n lightAlarmLowerLimit: selectedItem?.lightAlarmLowerLimit ? Number.parseInt(selectedItem.lightAlarmLowerLimit, 10) : void 0,\r\n lightAlarmHigherLimit: selectedItem?.lightAlarmHigherLimit ? Number.parseInt(selectedItem.lightAlarmHigherLimit, 10) : void 0,\r\n heavyAlarmLowerLimit: selectedItem?.heavyAlarmLowerLimit ? Number.parseInt(selectedItem.heavyAlarmLowerLimit, 10) : void 0,\r\n heavyAlarmHigherLimit: selectedItem?.heavyAlarmHigherLimit ? Number.parseInt(selectedItem.heavyAlarmHigherLimit, 10) : void 0,\r\n remarks: selectedItem?.remarks,\r\n lockVersion: selectedItem?.lockVersion,\r\n }));\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n\r\n }, [selectedItem]);\r\n\r\n //行選択時の入力項目更新\r\n useEffect(() => {\r\n const option = inspectionDivisionList.find(item => item.key === selectedItem?.inspectionGroupId);\r\n\r\n setSelectData((preValue) => (option?.value ?? []))\r\n\r\n }, [selectedItem, inspectionDivisionList]);\r\n\r\n /**\r\n * 連動リストボックス値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChangeSelectBox = (event: React.ChangeEvent, name: keyof InspectionItemInputItem) => {\r\n\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.value;\r\n\r\n const index = Number.parseInt(value, 10);\r\n const option = inspectionDivisionList.find(item => item.key === index);\r\n\r\n // 入力項目更新\r\n setValues({\r\n ...values,\r\n [name]: value,\r\n inspectionDivisionId: void 0,\r\n });\r\n\r\n // 連動したセレクトボックス更新\r\n setSelectData(option?.value ?? []);\r\n }\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof InspectionItemInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? MuiTextFieldUtility.LimitationNumber(Number.parseInt(target.value, 10)) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = InspectionItemAdapter.instance.addAsync(\r\n { item: values },\r\n {\r\n InspectionGroup: inspectionGroupList,\r\n InspectionDivision: inspectionDivisionList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = InspectionItemAdapter.instance.updateAsync(\r\n { item: values },\r\n {\r\n InspectionGroup: inspectionGroupList,\r\n InspectionDivision: inspectionDivisionList,\r\n }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // 確認ダイアログ表示\r\n dispatch(InspectionItemMasterSlice.actions.toggleDialog(true));\r\n\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(InspectionItemMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let inspectionGroup = \"\";\r\n let inspectionDivision = \"\";\r\n let weight = \"\";\r\n let inspectionItem = \"\";\r\n\r\n // 点検グループ\r\n if (!values.inspectionGroupId) {\r\n inspectionGroup = \"点検グループを選択してください\";\r\n result = true;\r\n }\r\n\r\n // 点検区分\r\n if (!values.inspectionDivisionId) {\r\n inspectionDivision = \"点検区分を選択してください\";\r\n result = true;\r\n }\r\n\r\n // 重み\r\n if (values.weight == null) {\r\n weight = \"No.を入力してください\";\r\n result = true;\r\n }\r\n\r\n // 点検項目\r\n if (!values.name) {\r\n inspectionItem = \"点検項目名を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n inspectionGroup,\r\n inspectionDivision,\r\n weight,\r\n inspectionItem,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { InspectionItemAdapter } from '../../../../../modules/adapter/inspection-item/inspection-item-adapter';\r\nimport { InspectionItemMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/inspection-item/inspection-item-slice';\r\nimport { InspectionItemRequest } from '../../../../../modules/adapter/inspection-item/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.inspectionItemMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.inspectionItemMaster.selectedRowItem ?? null);\r\n const selectBoxItem = useSelector((state: RootState) => state.inspectionItemMaster.selectBoxItem);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: InspectionItemRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n inspectionGroupId: selectedItem?.inspectionGroupId,\r\n inspectionDivisionId: selectedItem?.inspectionDivisionId,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, selectBoxItem, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(InspectionItemMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { InspectionItemMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/inspection-item/inspection-item-slice';\r\n// component\r\nimport { InspectionItemResultTableContainer } from './components/TableContent/InspectionItemResultTableContainer';\r\nimport { InspectionItemSearchConditionContainer } from './components/SearchContent/InspectionItemSearchConditionContainer';\r\nimport { InspectionItemDetailConditionContainer } from './components/DetailContent/InspectionItemDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\n\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n/**\r\n * 点検項目マスタ画面を提供します。\r\n * */\r\nconst InspectionItemPage: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterInspectionItem.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.inspectionItemMaster.isLoading);\r\n const isReportLoading = useSelector((state: RootState) => state.inspectionItemMaster.isReportLoading ?? false);\r\n const isShowMessage = useSelector((state: RootState) => state.inspectionItemMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.inspectionItemMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.inspectionItemMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.inspectionItemMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(InspectionItemMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default InspectionItemPage;\r\n","import { ModelListItem, ModelInputItem } from '../../../pages/Master/MachineModel/_types';\r\nimport { ModelRequest } from './types';\r\nimport { ModelInput, ModelItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `型式マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class ModelUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: ModelItem[]): ModelListItem[] {\r\n const result: ModelListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null || source.lockVersion == null) {\r\n continue;\r\n }\r\n const item: ModelListItem = {\r\n id: source.id,\r\n model: source.name ?? \"\",\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: ModelRequest): ModelInput {\r\n const result = new ModelInput();\r\n result.init({\r\n item: ModelUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: ModelInputItem): ModelItem {\r\n const result = new ModelItem();\r\n result.init({\r\n id: source.id,\r\n name: source.model,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { ModelClient, ModelInput, ModelOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { ModelRequest, ModelResult } from './types';\r\nimport { ModelUtility } from './model-utility';\r\n\r\n/**\r\n * `型式マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class ModelAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new ModelAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): ModelResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: ModelRequest): Promise {\r\n\r\n // 実行\r\n const input = new ModelInput();\r\n input.init(ModelUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ModelResult = {\r\n isError: false,\r\n items: ModelUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(parameter: ModelRequest): Promise {\r\n\r\n // 実行\r\n const input = new ModelInput();\r\n input.init(ModelUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ModelResult = {\r\n isError: false,\r\n items: ModelUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(parameter: ModelRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new ModelInput();\r\n input.init(ModelUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ModelResult = {\r\n isError: false,\r\n items: ModelUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(parameter: ModelRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new ModelInput();\r\n input.init(ModelUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ModelResult = {\r\n isError: false,\r\n items: ModelUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new ModelClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { ModelAdapter } from '../../adapter/model/model-adapter';\r\nimport { ModelRequest, ModelResult } from '../../adapter/model/types';\r\nimport { ModelListItem } from '../../../pages/Master/MachineModel/_types';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: null,\r\n isDialogOpen: false,\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const ModelMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'Model',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(ModelMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(ModelMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage());\r\n } else {\r\n // 正常\r\n dispatch(ModelMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(ModelMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(ModelMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(ModelMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(ModelMasterSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(ModelMasterSlice.actions.fetchStart());\r\n\r\n // データ取得\r\n const result = await ModelAdapter.instance.getAsync({ item: {} });\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(ModelMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(ModelMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(ModelMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(ModelMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: ModelRequest,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(ModelMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await ModelAdapter.instance.removeAsync(parameter);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(ModelMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(ModelMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(ModelMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(ModelMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(ModelMasterSlice.actions.clearSelectedItem());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(ModelMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(ModelMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { ModelListItem } from \"../../_types\"\r\n\r\n/** 型式マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: ModelListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: ModelListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: ModelListItem,\r\n}\r\n\r\n/** 型式マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: ModelListItem,\r\n}\r\n\r\n/** 型式マスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"型式\", field: \"model\" },\r\n];\r\n\r\n/** 型式マスタテーブルを提供します */\r\nconst MachineModelResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: void 0,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: ModelListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default MachineModelResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { ModelMasterSlice } from '../../../../../modules/slice/model/model-slice';\r\n// type\r\nimport { ModelListItem } from '../../_types';\r\n// component\r\nimport MachineModelResultTable from './MachineModelResultTable'\r\n\r\n/** 型式マスタテーブルを提供します */\r\nexport const MachineModelResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: ModelListItem[] = useSelector((state: RootState) => state.modelMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.modelMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: ModelListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(ModelMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { ModelInputItem } from '../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 型式マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: ModelInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n};\r\n\r\n/**\r\n * 型式マスタ 検索エリアを提供します。\r\n * */\r\nconst MachineModelSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof ModelInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n\r\n {/* 型式 */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default MachineModelSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch } from 'react-redux';\r\nimport { ModelMasterSlice, onExcuteAsync } from '../../../../../modules/slice/model/model-slice';\r\nimport { ModelAdapter } from '../../../../../modules/adapter/model/model-adapter'\r\n// type\r\nimport { ModelInputItem } from '../../_types';\r\n// component\r\nimport MachineModelSearchCondition from './MachineModelSearchCondition';\r\n\r\n/**\r\n * 型式マスタ 検索エリアを提供します。\r\n * */\r\nexport const MachineModelSearchConditionConTainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: ModelInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = ModelAdapter.instance.getAsync(\r\n { item: inputItem },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(ModelMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { ModelInputItem, ModelValidateInputItem } from '../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // テキストエリア\r\n textarea: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 型式マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: ModelInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof ModelInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: ModelValidateInputItem,\r\n};\r\n\r\n/**\r\n * 型式マスタ 詳細エリアを提供します。\r\n * */\r\nconst ModelDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n\r\n \r\n\r\n {/* 型式 */}\r\n props.onChange(event, \"model\")}\r\n required\r\n error={!props.validateError.model === false}\r\n helperText={props.validateError.model}\r\n />\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ModelDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { ModelMasterSlice, onExcuteAsync } from '../../../../../modules/slice/model/model-slice';\r\nimport { ModelAdapter } from '../../../../../modules/adapter/model/model-adapter'\r\n// type\r\nimport { ModelInputItem, ModelValidateInputItem } from '../../_types';\r\n// component\r\nimport ModelDetailCondition from './MachineModelDetailCondition'\r\n\r\n/**\r\n * 型式マスタ 詳細エリアを提供します。\r\n * */\r\nexport const ModelDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.modelMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.modelMaster.selectedRowItem);\r\n\r\n const initialValues: ModelInputItem = {\r\n id: selectedItem?.id,\r\n model: selectedItem?.model,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n model: selectedItem?.model,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof ModelInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n /** 追加ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = ModelAdapter.instance.addAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = ModelAdapter.instance.updateAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(ModelMasterSlice.actions.toggleDialog(true));\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(ModelMasterSlice.actions.chageCreating(false))\r\n }\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let model = \"\";\r\n\r\n // 型式\r\n if (!values.model) {\r\n model = \"型式を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n model,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { ModelAdapter } from '../../../../../modules/adapter/model/model-adapter';\r\nimport { ModelMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/model/model-slice';\r\nimport { ModelRequest } from '../../../../../modules/adapter/model/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.modelMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.modelMaster.selectedRowItem ?? null);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: ModelRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(ModelMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { ModelMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/model/model-slice';\r\n// component\r\nimport { MachineModelResultTableContainer } from './components/TableContent/MachineModelResultTableContainer';\r\nimport { MachineModelSearchConditionConTainer } from './components/SearchContent/MachineModelSearchConditionContainer';\r\nimport { ModelDetailConditionContainer } from './components/DetailContent/MachineModelDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * 型式マスタ画面を提供します。\r\n * */\r\nconst MachineModelPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterModel.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.modelMaster.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.modelMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.modelMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.modelMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.modelMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(ModelMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default MachineModelPage;\r\n","import { ManufacturerListItem, ManufacturerInputItem } from '../../../pages/Master/Manufacturer/_types';\r\nimport { ManufacturerRequest } from './types';\r\nimport { ManufacturerInput, ManufacturerItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `メーカーマスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class ManufacturerUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: ManufacturerItem[]): ManufacturerListItem[] {\r\n const result: ManufacturerListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null || source.lockVersion == null) {\r\n continue;\r\n }\r\n const item: ManufacturerListItem = {\r\n id: source.id,\r\n manufacturer: source.name ?? \"\",\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: ManufacturerRequest): ManufacturerInput {\r\n const result = new ManufacturerInput();\r\n result.init({\r\n item: ManufacturerUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: ManufacturerInputItem): ManufacturerItem {\r\n const result = new ManufacturerItem();\r\n result.init({\r\n id: source.id,\r\n name: source.manufacturer,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { ManufacturerClient, ManufacturerInput, ManufacturerOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { ManufacturerRequest, ManufacturerResult } from './types';\r\nimport { ManufacturerUtility } from './manufacturer-utility';\r\n\r\n/**\r\n * `工法マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class ManufacturerAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new ManufacturerAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): ManufacturerResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: ManufacturerRequest): Promise {\r\n\r\n // 実行\r\n const input = new ManufacturerInput();\r\n input.init(ManufacturerUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ManufacturerResult = {\r\n isError: false,\r\n items: ManufacturerUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(parameter: ManufacturerRequest): Promise {\r\n\r\n // 実行\r\n const input = new ManufacturerInput();\r\n input.init(ManufacturerUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ManufacturerResult = {\r\n isError: false,\r\n items: ManufacturerUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(parameter: ManufacturerRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new ManufacturerInput();\r\n input.init(ManufacturerUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ManufacturerResult = {\r\n isError: false,\r\n items: ManufacturerUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(parameter: ManufacturerRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new ManufacturerInput();\r\n input.init(ManufacturerUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: ManufacturerResult = {\r\n isError: false,\r\n items: ManufacturerUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new ManufacturerClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { ManufacturerAdapter } from '../../adapter/manufacturer/manufacturer-adapter';\r\nimport { ManufacturerRequest, ManufacturerResult } from '../../adapter/manufacturer/types';\r\nimport { ManufacturerListItem } from '../../../pages/Master/Manufacturer/_types';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: null,\r\n isDialogOpen: false,\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const ManufacturerMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'Manufacturer',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(ManufacturerMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(ManufacturerMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage());\r\n } else {\r\n // 正常\r\n dispatch(ManufacturerMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(ManufacturerMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(ManufacturerMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(ManufacturerMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(ManufacturerMasterSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(ManufacturerMasterSlice.actions.fetchStart());\r\n\r\n // データ取得\r\n const result = await ManufacturerAdapter.instance.getAsync({ item: {} });\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(ManufacturerMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(ManufacturerMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(ManufacturerMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(ManufacturerMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: ManufacturerRequest,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(ManufacturerMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await ManufacturerAdapter.instance.removeAsync(parameter);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(ManufacturerMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(ManufacturerMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(ManufacturerMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(ManufacturerMasterSlice.actions.clearSelectedItem());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(ManufacturerMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(ManufacturerMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { ManufacturerListItem } from '../../_types';\r\n\r\n/** メーカー マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: ManufacturerListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: ManufacturerListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: ManufacturerListItem,\r\n}\r\n\r\n/** メーカーマスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: ManufacturerListItem,\r\n}\r\n\r\n/** メーカーマスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"メーカー\", field: \"manufacturer\" },\r\n];\r\n\r\n/** メーカーマスタテーブルを提供します */\r\nconst ManufacturerResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: void 0,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: ManufacturerListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default ManufacturerResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { ManufacturerMasterSlice } from '../../../../../modules/slice/manufacturer/manufacturer-slice';\r\n// type\r\nimport { ManufacturerListItem } from '../../_types';\r\n// component\r\nimport ManufacturerResultTable from './ManufacturerResultTable';\r\n\r\n/** メーカーマスタテーブルを提供します */\r\nexport const ManufacturerResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: ManufacturerListItem[] = useSelector((state: RootState) => state.manufacturerMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.manufacturerMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: ManufacturerListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(ManufacturerMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { ManufacturerInputItem } from '../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** メーカーマスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: ManufacturerInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n};\r\n\r\n/**\r\n * メーカーマスタ 検索エリアを提供します。\r\n * */\r\nconst ManufacturerSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof ManufacturerInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* メーカー */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default ManufacturerSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch } from 'react-redux';\r\nimport { ManufacturerMasterSlice, onExcuteAsync } from '../../../../../modules/slice/manufacturer/manufacturer-slice';\r\nimport { ManufacturerAdapter } from '../../../../../modules/adapter/manufacturer/manufacturer-adapter';\r\n// type\r\nimport { ManufacturerInputItem } from '../../_types';\r\n// component\r\nimport ManufacturerDetailCondition from './ManufacturerSearchCondition';\r\n\r\n/**\r\n * メーカーマスタ 検索エリアを提供します。\r\n * */\r\nexport const ManufacturerSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: ManufacturerInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = ManufacturerAdapter.instance.getAsync(\r\n { item: inputItem },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(ManufacturerMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { ManufacturerInputItem, ManufacturerValidateInputItem } from '../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n\r\n // テキストエリア\r\n textarea: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** メーカーマスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: ManufacturerInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof ManufacturerInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: ManufacturerValidateInputItem,\r\n};\r\n\r\n/**\r\n * メーカー マスタ 詳細エリアを提供します。\r\n * */\r\nconst ManufacturerDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n\r\n {/* メーカー名 */}\r\n props.onChange(event, \"manufacturer\")}\r\n required\r\n error={!props.validateError.manufacturer === false}\r\n helperText={props.validateError.manufacturer}\r\n />\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ManufacturerDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { ManufacturerMasterSlice, onExcuteAsync } from '../../../../../modules/slice/manufacturer/manufacturer-slice';\r\nimport { ManufacturerAdapter } from '../../../../../modules/adapter/manufacturer/manufacturer-adapter';\r\n// type\r\nimport { ManufacturerInputItem, ManufacturerValidateInputItem } from '../../_types';\r\n// component\r\nimport ModelDetailCondition from './ManufacturerDetailCondition';\r\n\r\n/**\r\n * メーカーマスタ 詳細エリアを提供します。\r\n * */\r\nexport const ManufacturerDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.manufacturerMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.manufacturerMaster.selectedRowItem);\r\n\r\n const initialValues: ManufacturerInputItem = {\r\n id: selectedItem?.id,\r\n manufacturer: selectedItem?.manufacturer,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n manufacturer: selectedItem?.manufacturer,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof ManufacturerInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /** 追加ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = ManufacturerAdapter.instance.addAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = ManufacturerAdapter.instance.updateAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(ManufacturerMasterSlice.actions.toggleDialog(true));\r\n\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(ManufacturerMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let manufacturer = \"\";\r\n\r\n // 型式\r\n if (!values.manufacturer) {\r\n manufacturer = \"メーカーを入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n manufacturer,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { ManufacturerAdapter } from '../../../../../modules/adapter/manufacturer/manufacturer-adapter';\r\nimport { ManufacturerMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/manufacturer/manufacturer-slice';\r\nimport { ManufacturerRequest } from '../../../../../modules/adapter/manufacturer/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.manufacturerMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.manufacturerMaster.selectedRowItem ?? null);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: ManufacturerRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(ManufacturerMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { ManufacturerMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/manufacturer/manufacturer-slice';\r\n// component\r\nimport { ManufacturerResultTableContainer } from './components/TableContent/ManufacturerResultTableContainer';\r\nimport { ManufacturerSearchConditionContainer } from './components/SearchContent/ManufacturerSearchConditionContainer';\r\nimport { ManufacturerDetailConditionContainer } from './components/DetailContent/ManufacturerDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * メーカーマスタ画面を提供します。\r\n * */\r\nconst ManufacturerPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterManufacturer.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.manufacturerMaster.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.manufacturerMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.manufacturerMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.manufacturerMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.manufacturerMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(ManufacturerMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default ManufacturerPage;\r\n","import { MethodListItem, MethodInputItem } from '../../../pages/Master/Method/_types';\r\nimport { MethodRequest } from './types';\r\nimport { MethodInput, MethodItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `工法マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class MethodUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: MethodItem[]): MethodListItem[] {\r\n const result: MethodListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.id == null || source.lockVersion == null) {\r\n continue;\r\n }\r\n const item: MethodListItem = {\r\n id: source.id,\r\n method: source.name ?? \"\",\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: MethodRequest): MethodInput {\r\n const result = new MethodInput();\r\n result.init({\r\n item: MethodUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: MethodInputItem): MethodItem {\r\n const result = new MethodItem();\r\n result.init({\r\n id: source.id,\r\n name: source.method,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { MethodClient, MethodInput, MethodOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { MethodRequest, MethodResult } from './types';\r\nimport { MethodUtility } from './method-utility';\r\n\r\n/**\r\n * `工法マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class MethodAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new MethodAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): MethodResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: MethodRequest): Promise {\r\n\r\n // 実行\r\n const input = new MethodInput();\r\n input.init(MethodUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MethodResult = {\r\n isError: false,\r\n items: MethodUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(parameter: MethodRequest): Promise {\r\n\r\n // 実行\r\n const input = new MethodInput();\r\n input.init(MethodUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MethodResult = {\r\n isError: false,\r\n items: MethodUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(parameter: MethodRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MethodInput();\r\n input.init(MethodUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MethodResult = {\r\n isError: false,\r\n items: MethodUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(parameter: MethodRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new MethodInput();\r\n input.init(MethodUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: MethodResult = {\r\n isError: false,\r\n items: MethodUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new MethodClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { MethodAdapter } from '../../adapter/method/method-adapter';\r\nimport { MethodRequest, MethodResult } from '../../adapter/method/types';\r\nimport { MethodListItem } from '../../../pages/Master/Method/_types';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: null,\r\n isDialogOpen: false,\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const MethodMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'Method',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MethodMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(MethodMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage());\r\n } else {\r\n // 正常\r\n dispatch(MethodMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(MethodMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(MethodMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MethodMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(MethodMasterSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(MethodMasterSlice.actions.fetchStart());\r\n\r\n // データ取得\r\n const result = await MethodAdapter.instance.getAsync({ item: {} });\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(MethodMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(MethodMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(MethodMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MethodMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: MethodRequest,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(MethodMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await MethodAdapter.instance.removeAsync(parameter);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(MethodMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(MethodMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(MethodMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(MethodMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(MethodMasterSlice.actions.clearSelectedItem());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(MethodMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(MethodMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { MethodListItem } from '../../_types';\r\n\r\n/** 工法 マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: MethodListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: MethodListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MethodListItem,\r\n}\r\n\r\n/** 工法マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: MethodListItem,\r\n}\r\n\r\n/** 工法マスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"工法\", field: \"method\" },\r\n];\r\n\r\n/** 工法マスタテーブルを提供します */\r\nconst MethodResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: void 0,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: MethodListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default MethodResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MethodMasterSlice } from '../../../../../modules/slice/method/method-slice';\r\n// type\r\nimport { MethodListItem } from '../../_types';\r\n// component\r\nimport MethodResultTable from './MethodResultTable';\r\n\r\n/** 工法マスタテーブルを提供します */\r\nexport const MethodResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: MethodListItem[] = useSelector((state: RootState) => state.methodMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.methodMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: MethodListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(MethodMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { MethodInputItem } from '../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 工法マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: MethodInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n};\r\n\r\n/**\r\n * 工法マスタ 検索エリアを提供します。\r\n * */\r\nconst MathodSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof MethodInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* 工法 */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default MathodSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch } from 'react-redux';\r\nimport { MethodMasterSlice, onExcuteAsync } from '../../../../../modules/slice/method/method-slice';\r\nimport { MethodAdapter } from '../../../../../modules/adapter/method/method-adapter';\r\n// type\r\nimport { MethodInputItem } from '../../_types';\r\n// component\r\nimport MethodSearchCondition from './MethodSearchCondition';\r\n\r\n/**\r\n * メーカーマスタ 検索エリアを提供します。\r\n * */\r\nexport const MethodSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: MethodInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = MethodAdapter.instance.getAsync(\r\n { item: inputItem },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(MethodMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { MethodInputItem, MethodValidateInputItem } from '../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n\r\n // テキストエリア\r\n textarea: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** 工法マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: MethodInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof MethodInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: MethodValidateInputItem,\r\n};\r\n\r\n/**\r\n * 工法 マスタ 詳細エリアを提供します。\r\n * */\r\nconst MethodDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n\r\n {/* 工法名 */}\r\n props.onChange(event, \"method\")}\r\n required\r\n error={!props.validateError.method === false}\r\n helperText={props.validateError.method}\r\n\r\n />\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MethodDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { MethodMasterSlice, onExcuteAsync } from '../../../../../modules/slice/method/method-slice';\r\nimport { MethodAdapter } from '../../../../../modules/adapter/method/method-adapter';\r\n// type\r\nimport { MethodInputItem, MethodValidateInputItem } from '../../_types';\r\n// component\r\nimport MethodDetailCondition from './MethodDetailCondition';\r\n\r\n/**\r\n * 工法マスタ 詳細エリアを提供します。\r\n * */\r\nexport const MethodDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.methodMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.methodMaster.selectedRowItem);\r\n\r\n const initialValues: MethodInputItem = {\r\n id: selectedItem?.id,\r\n method: selectedItem?.method,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n method: selectedItem?.method,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof MethodInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /** 追加ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MethodAdapter.instance.addAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = MethodAdapter.instance.updateAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(MethodMasterSlice.actions.toggleDialog(true));\r\n\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(MethodMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let method = \"\";\r\n\r\n // 型式\r\n if (!values.method) {\r\n method = \"工法を入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n method,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { MethodAdapter } from '../../../../../modules/adapter/method/method-adapter';\r\nimport { MethodMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/method/method-slice';\r\nimport { MethodRequest } from '../../../../../modules/adapter/method/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.methodMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.methodMaster.selectedRowItem ?? null);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: MethodRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(MethodMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { MethodMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/method/method-slice';\r\n// component\r\nimport { MethodResultTableContainer } from './components/TableContent/MethodResultTableContainer';\r\nimport { MethodSearchConditionContainer } from './components/SearchContent/MethodSearchConditionContainer';\r\nimport { MethodDetailConditionContainer } from './components/DetailContent/MethodDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\n\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n/**\r\n * 工法マスタ画面を提供します。\r\n * */\r\nconst MethodPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterMethod.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.methodMaster.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.methodMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.methodMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.methodMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.methodMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(MethodMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default MethodPage;\r\n","import { UserListItem, UserInputItem } from '../../../pages/Master/User/_types';\r\nimport { UserRequest } from './types';\r\nimport { UserInput, UserItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `ユーザーマスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class UserUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: UserItem[]): UserListItem[] {\r\n const result: UserListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.newId == null || source.lockVersion == null) {\r\n continue;\r\n }\r\n const item: UserListItem = {\r\n id: source.newId,\r\n user: source.name ?? \"\",\r\n inspectorName: source.inspectorName ?? \"\",\r\n password: source.password ?? \"\",\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: UserRequest): UserInput {\r\n const result = new UserInput();\r\n result.init({\r\n item: UserUtility.toInputItem(source.item, source.oldId),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: UserInputItem, oldId?: string): UserItem {\r\n const result = new UserItem();\r\n result.init({\r\n newId: source.id,\r\n oldId: oldId,\r\n name: source.user,\r\n inspectorName: source.inspectorName,\r\n password: source.password,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { UserClient, UserInput, UserOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { UserRequest, UserResult } from './types';\r\nimport { UserUtility } from './user-utility';\r\n\r\n/**\r\n * `ユーザーマスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class UserAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new UserAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): UserResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(parameter: UserRequest): Promise {\r\n\r\n // 実行\r\n const input = new UserInput();\r\n input.init(UserUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UserResult = {\r\n isError: false,\r\n items: UserUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(parameter: UserRequest): Promise {\r\n\r\n // 実行\r\n const input = new UserInput();\r\n input.init(UserUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UserResult = {\r\n isError: false,\r\n items: UserUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(parameter: UserRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.oldId == null ? \"Old ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new UserInput();\r\n input.init(UserUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UserResult = {\r\n isError: false,\r\n items: UserUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(parameter: UserRequest): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new UserInput();\r\n input.init(UserUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: UserResult = {\r\n isError: false,\r\n items: UserUtility.toListItem(output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new UserClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { UserAdapter } from '../../adapter/user/user-adapter';\r\nimport { UserRequest, UserResult } from '../../adapter/user/types';\r\nimport { UserListItem } from '../../../pages/Master/User/_types';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: null,\r\n isDialogOpen: false,\r\n isUpdated: false,\r\n}\r\n\r\n/** 取得 Slice を 作成します。*/\r\nexport const UserMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'User',\r\n initialState: initialState,\r\n reducers: {\r\n\r\n toggleSingoutDialog(state, action: PayloadAction) {\r\n state.isUpdated = action.payload;\r\n }\r\n },\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(UserMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(UserMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage());\r\n } else {\r\n // 正常\r\n dispatch(UserMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(UserMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(UserMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(UserMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onUpdateAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(UserMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(UserMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage());\r\n } else {\r\n // 正常\r\n dispatch(UserMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(UserMasterSlice.actions.chageCreating(false));\r\n\r\n // サインアウトダイアログを開く\r\n dispatch(UserMasterSlice.actions.toggleSingoutDialog(true));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(UserMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(UserMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(UserMasterSlice.actions.resetState());\r\n\r\n // 処理中 ON\r\n dispatch(UserMasterSlice.actions.fetchStart());\r\n\r\n // データ取得\r\n const result = await UserAdapter.instance.getAsync({ item: {} });\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(UserMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(UserMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(UserMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(UserMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: UserRequest,\r\n password: string,\r\n isAuthorized?: boolean\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(UserMasterSlice.actions.fetchStart());\r\n\r\n // パスワード確認\r\n if (parameter.item.password !== password) {\r\n // 異常メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(\"パスワードが違います\"));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await UserAdapter.instance.removeAsync(parameter);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(UserMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(UserMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(UserMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(UserMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(UserMasterSlice.actions.clearSelectedItem());\r\n\r\n // サインアウトダイアログを開く\r\n if (isAuthorized) dispatch(UserMasterSlice.actions.toggleSingoutDialog(true));\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(UserMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(UserMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Chip } from '@material-ui/core';\r\nimport HowToRegIcon from '@material-ui/icons/HowToReg';\r\nimport green from '@material-ui/core/colors/green';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // チップ\r\n chip: {\r\n marginLeft: theme.spacing(1),\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: green[600],\r\n },\r\n })\r\n);\r\n\r\n\r\n/**\r\n * サインインユーザーのアイコンを表示します。\r\n */\r\nconst SigninUserTag: React.FC<{}> = () => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default SigninUserTag;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable, { Column } from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { UserListItem } from '../../_types';\r\nimport { UserItem } from '../../../../../_types';\r\nimport SigninUserTag from './SigninUserTag';\r\n\r\n/** ユーザー マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: UserListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: UserListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: UserListItem,\r\n /** サインインユーザー情報を表します。 */\r\n userItem?: UserItem,\r\n}\r\n\r\n/** ユーザーマスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: UserListItem,\r\n}\r\n\r\n\r\n/** ユーザーマスタテーブルを提供します */\r\nconst UserResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** ユーザーテーブルのカラムを表します。 */\r\n const columns: Column[] = [\r\n {\r\n title: \"\",\r\n field: \"\",\r\n width: 50,\r\n render: (rowData: UserListItem) => (props.userItem?.id === rowData.id && ),\r\n sorting: false,\r\n },\r\n { title: \"ユーザー id\", field: \"id\" },\r\n { title: \"ユーザー名\", field: \"user\" },\r\n { title: \"検印文字\", field: \"inspectorName\" },\r\n\r\n ];\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: void 0,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: UserListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n {\r\n let color = \"\";\r\n if (values.selectedRow?.id === rowData.id) color = fade(theme.palette.secondary.main, 0.5); // 選択された行の背景色\r\n\r\n return {\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: color,\r\n }\r\n }\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default UserResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { UserMasterSlice } from '../../../../../modules/slice/user/user-slice';\r\n// type\r\nimport { UserListItem } from '../../_types';\r\n// component\r\nimport UserResultTable from './UserResultTable';\r\n\r\n/** ユーザーマスタテーブルを提供します */\r\nexport const UserResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: UserListItem[] = useSelector((state: RootState) => state.userMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.userMaster.selectedRowItem);\r\n const userItem = useSelector((state: RootState) => state.authentication.user);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: UserListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(UserMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n userItem={userItem}\r\n />\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\n// type\r\nimport { UserInputItem } from '../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** ユーザーマスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: UserInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n};\r\n\r\n/**\r\n * ユーザーマスタ 検索エリアを提供します。\r\n * */\r\nconst UserSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof UserInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* ユーザーid */}\r\n \r\n {/* ユーザー名 */}\r\n \r\n {/* 検印文字 */}\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default UserSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch } from 'react-redux';\r\nimport { UserMasterSlice, onExcuteAsync } from '../../../../../modules/slice/user/user-slice';\r\nimport { UserAdapter } from '../../../../../modules/adapter/user/user-adapter';\r\n// type\r\nimport { UserInputItem } from '../../_types';\r\n// component\r\nimport UserSearchCondition from './UserSearchCondition';\r\n\r\n/**\r\n * ユーザーマスタ 検索エリアを提供します。\r\n * */\r\nexport const UserSearchConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: UserInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = UserAdapter.instance.getAsync(\r\n { item: inputItem },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(UserMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport {\r\n TextField,\r\n Box,\r\n IconButton,\r\n FormControl,\r\n InputLabel,\r\n OutlinedInput,\r\n InputAdornment,\r\n} from '@material-ui/core';\r\nimport { Visibility, VisibilityOff } from '@material-ui/icons';\r\n// type\r\nimport { UserInputItem, UserValidateInputItem } from '../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 入力項目(パスワード)\r\n inputItem: {\r\n width: \"250px\",\r\n margin: \"8px\",\r\n },\r\n\r\n // テキストエリア\r\n textarea: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n\r\n }),\r\n);\r\n\r\n/** ユーザーマスタ 詳細エリアの Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: UserInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof UserInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: UserValidateInputItem,\r\n /** サインインユーザー項目かどうかを表します。 */\r\n isSigninUser: boolean,\r\n};\r\n\r\n/**\r\n * ユーザーマスタ 詳細エリアを提供します。\r\n * */\r\nconst UserDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** パスワードの表示状態を表します。 */\r\n const [isShowPassword, setIsShowPassword] = useState(false);\r\n\r\n /** パスワード表示非表示ボタン クリック時のイベント処理を行います。*/\r\n const handleClickShowPassword = () => {\r\n setIsShowPassword(preValue => !preValue);\r\n };\r\n\r\n /**\r\n * パスワード表示非表示ボタン マウスダウン時のイベント処理を行います。\r\n * @param event\r\n */\r\n const handleMouseDownPassword = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n };\r\n\r\n // 表示\r\n return (\r\n <>\r\n \r\n\r\n {/* ユーザー id */}\r\n props.onChange(event, \"id\")}\r\n disabled={!(props.isSigninUser || props.isCreating)}\r\n required\r\n error={!props.validateError.id === false}\r\n helperText={props.validateError.id}\r\n />\r\n\r\n {/* ユーザー名 */}\r\n props.onChange(event, \"user\")}\r\n disabled={!(props.isSigninUser || props.isCreating)}\r\n required\r\n error={!props.validateError.user === false}\r\n helperText={props.validateError.user}\r\n />\r\n\r\n {/* 検印文字 */}\r\n props.onChange(event, \"inspectorName\")}\r\n disabled={!(props.isSigninUser || props.isCreating)}\r\n required\r\n error={!props.validateError.inspectorName === false}\r\n helperText={props.validateError.inspectorName}\r\n />\r\n\r\n\r\n {/* パスワード */}\r\n {(props.isSigninUser || props.isCreating) &&\r\n \r\n \r\n {isShowPassword ? : }\r\n \r\n \r\n )\r\n }}\r\n label=\"パスワード\"\r\n value={props.initialValues.password ?? \"\"}\r\n onChange={(event) => props.onChange(event, \"password\")}\r\n required\r\n error={!props.validateError.password === false}\r\n helperText={props.validateError.password}\r\n />\r\n }\r\n\r\n\r\n {/* 確認用パスワード */}\r\n {(props.isSigninUser || props.isCreating) &&\r\n \r\n \r\n {isShowPassword ? : }\r\n \r\n \r\n )\r\n }}\r\n label=\"確認用パスワード\"\r\n value={props.initialValues.confirmPassword ?? \"\"}\r\n onChange={(event) => props.onChange(event, \"confirmPassword\")}\r\n required\r\n error={!props.validateError.confirmPassword === false}\r\n helperText={props.validateError.confirmPassword}\r\n />\r\n }\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default UserDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { UserMasterSlice, onExcuteAsync, onUpdateAsync } from '../../../../../modules/slice/user/user-slice';\r\nimport { UserAdapter } from '../../../../../modules/adapter/user/user-adapter';\r\n// type\r\nimport { UserInputItem, UserValidateInputItem, UserListItem } from '../../_types';\r\n// component\r\nimport UserDetailCondition from './UserDetailCondition';\r\nimport { User } from 'oidc-client/dist/oidc-client';\r\nimport { UserItem } from '../../../../../_types';\r\n\r\n/**\r\n * ユーザーマスタ 詳細エリアを提供します。\r\n * */\r\nexport const UserDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.userMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.userMaster.selectedRowItem);\r\n const user = useSelector((state: RootState) => state.authentication.user);\r\n\r\n\r\n const initialValues: UserInputItem = {\r\n id: selectedItem?.id,\r\n user: selectedItem?.user,\r\n password: \"\",\r\n confirmPassword: \"\",\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n user: selectedItem?.user,\r\n inspectorName: selectedItem?.inspectorName,\r\n password: selectedItem?.password,\r\n confirmPassword: selectedItem?.password,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof UserInputItem) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /** 追加ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = UserAdapter.instance.addAsync(\r\n { item: values },\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = UserAdapter.instance.updateAsync(\r\n {\r\n item: values,\r\n oldId: selectedItem?.id,\r\n },\r\n\r\n );\r\n await dispatch(onUpdateAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(UserMasterSlice.actions.toggleDialog(true));\r\n\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(UserMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let id = \"\";\r\n let user = \"\";\r\n let inspectorName = \"\";\r\n let password = \"\";\r\n let confirmPassword = \"\";\r\n\r\n // ユーザー id\r\n if (!values.id) {\r\n id = \"ユーザー id をしてください\";\r\n result = true;\r\n }\r\n\r\n // ユーザー名\r\n if (!values.user) {\r\n user = \"ユーザー名を入力してください\";\r\n result = true;\r\n }\r\n\r\n // 検印文字\r\n if (!values.inspectorName) {\r\n inspectorName = \"検印文字を入力してください\";\r\n result = true;\r\n }\r\n\r\n // パスワード\r\n if (!values.password) {\r\n password = \"パスワードを入力してください\";\r\n result = true;\r\n }\r\n\r\n // 確認用パスワード\r\n if (!values.confirmPassword) {\r\n confirmPassword = \"確認用パスワードを入力してください\";\r\n result = true;\r\n } else if (values.password !== values.confirmPassword) {\r\n confirmPassword = \"パスワードが一致しません\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n id,\r\n user,\r\n inspectorName,\r\n password,\r\n confirmPassword,\r\n });\r\n\r\n // 結果\r\n return result;\r\n\r\n }\r\n\r\n /** */\r\n const checkSignInUser = (signinUser?: UserItem, selectedItem?: UserListItem): boolean => {\r\n\r\n if (!signinUser || !selectedItem) return false;\r\n\r\n return signinUser.id === selectedItem.id && signinUser.name === selectedItem.user;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { UserAdapter } from '../../../../../modules/adapter/user/user-adapter';\r\nimport { UserMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/user/user-slice';\r\nimport { UserRequest } from '../../../../../modules/adapter/user/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.userMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.userMaster.selectedRowItem ?? null);\r\n const authorized = useSelector((state: RootState) => state.authentication.user);\r\n\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: UserRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n password: selectedItem?.password,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n let isAuthirozed = false\r\n if (selectedItem?.id && authorized && selectedItem.id === authorized.id) isAuthirozed = true;\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, pwassword, isAuthirozed));\r\n\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(UserMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// clsx\r\nimport clsx from 'clsx';\r\n// material-ui\r\nimport { Dialog, DialogActions, DialogTitle, DialogContent, Typography, TextField, InputAdornment, IconButton, Box } from '@material-ui/core';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\n\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiUndoStampButton from '../../../../../components/Buttons/MuiUndoStampButton';\r\nimport MuiColorButton from '../../../../../components/Buttons/ColorButton/MuiColorButton';\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // サブタイトル\r\n subtitle: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 名称\r\n name: {\r\n fontSize: \"1.25rem\",\r\n marginRight: theme.spacing(1),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n // ダイアログコンテンツ(ダイアログ内のTextfiledのlabelが全角4文字以上でスクロールが発生するで、無効にする)\r\n dialogContent: {\r\n overflowY: \"visible\"\r\n }\r\n }),\r\n);\r\n\r\n\r\n/** 検印取り消し確認ダイアログの Props を表示します。 */\r\ninterface Props {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** 検印ボタンクリック時の処理を表します。 */\r\n onClick: () => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n}\r\n\r\n/**\r\n * 検印取り消し確認ダイアログを表示します。\r\n * @param props\r\n */\r\nconst SignoutDialog: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n\r\n {/* タイトル */}\r\n \r\n \r\n ユーザーマスタの更新\r\n \r\n \r\n\r\n\r\n \r\n\r\n {/* message */}\r\n \r\n ユーザー情報が更新されました。
ユーザー情報の確認のため、サインアウトし、もう一度サインインをしてください。\r\n
\r\n\r\n
\r\n\r\n {/* ボタンアクション */}\r\n \r\n }\r\n className={classes.button}\r\n onClick={props.onClick}\r\n >\r\n サインアウト\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SignoutDialog;\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport SignoutDialog from './SignoutDialog';\r\nimport { UserAdapter } from '../../../../../modules/adapter/user/user-adapter';\r\nimport { onSignOutAsync } from '../../../../../modules/slice/authentication/authentication-slice';\r\nimport { UserRequest } from '../../../../../modules/adapter/user/types';\r\nimport { UserMasterSlice } from '../../../../../modules/slice/user/user-slice';\r\n\r\n\r\n/**\r\n * サインアウトダイアログを表示します。\r\n * @param props\r\n */\r\nexport const SingoutDialogContainer: React.FC<{}> = () => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.userMaster.isUpdated ?? false);\r\n\r\n /** ボタンのクリック処理を行います。 */\r\n const onClick = async () => {\r\n\r\n // 非同期通信\r\n await dispatch(onSignOutAsync());\r\n\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(UserMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { UserMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/user/user-slice';\r\n// component\r\nimport { UserResultTableContainer } from './components/TableContent/UserResultTableContainer';\r\nimport { UserSearchConditionContainer } from './components/SearchContent/UserSearchConditionContainer';\r\nimport { UserDetailConditionContainer } from './components/DetailContent/UserDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\nimport { SingoutDialogContainer } from './components/UpdateDialog/SignoutDialogContainer';\r\n\r\n/**\r\n * ユーザーマスタ画面を提供します。\r\n * */\r\nconst UserPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterUser.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.userMaster.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.userMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.userMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.userMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.userMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(UserMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default UserPage;\r\n","import { RemarksListItem, RemarksInputItem } from '../../../pages/Master/Remarks/_types';\r\nimport { RemarksRequest, RemarksSelectBoxItemState } from './types';\r\nimport { RemarksInput, RemarksItem } from '../../swagger-clients';\r\n\r\n/**\r\n * `整備区分マスタ` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class RemarksUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(\r\n selectBoxItem: RemarksSelectBoxItemState,\r\n items?: RemarksItem[]\r\n ): RemarksListItem[] {\r\n const result: RemarksListItem[] = [];\r\n if (items == null) {\r\n return result;\r\n }\r\n\r\n for (const source of items) {\r\n // 異常値はスキップ\r\n if (source.remarksId == null\r\n || source.machineType == null\r\n || source.title == null\r\n || source.item == null\r\n || source.weight == null\r\n || source.lockVersion == null) {\r\n continue;\r\n }\r\n\r\n // セレクトボックスの名称を取得\r\n const typeItem = selectBoxItem.MachineType.find(_ => _.key === source.machineType);\r\n\r\n const item: RemarksListItem = {\r\n id: source.remarksId,\r\n machineType: typeItem?.value ?? \"\",\r\n machineTypeId: source.machineType,\r\n title: source.title,\r\n item: source.item,\r\n weight: source.weight,\r\n lockVersion: source.lockVersion,\r\n };\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力情報に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInput(source: RemarksRequest): RemarksInput {\r\n const result = new RemarksInput();\r\n result.init({\r\n item: RemarksUtility.toInputItem(source.item),\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 入力項目に変換します。\r\n *\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toInputItem(source: RemarksInputItem): RemarksItem {\r\n const result = new RemarksItem();\r\n result.init({\r\n remarksId: source.id,\r\n machineType: source.machineTypeId,\r\n title: source.title,\r\n item: source.item,\r\n weight: source.weight,\r\n lockVersion: source.lockVersion,\r\n });\r\n return result;\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","import { RemarksClient, RemarksInput, RemarksOutput } from '../../swagger-clients';\r\nimport { WebApiAdapter } from '../../web-api-adapter';\r\nimport { RemarksRequest, RemarksResult, RemarksSelectBoxItemState } from './types';\r\nimport { RemarksUtility } from './remarks-utility';\r\n\r\n/**\r\n * `整備区分マスタ` 関連の `Web API` を公開するサーバーと `HTTP` 通信する機能を提供します。\r\n */\r\nexport class RemarksAdapter extends WebApiAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new RemarksAdapter();\r\n\r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): RemarksResult {\r\n return {\r\n items: [],\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 一覧を取得します。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async getAsync(\r\n parameter: RemarksRequest,\r\n selectBoxItem: RemarksSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new RemarksInput();\r\n input.init(RemarksUtility.toInput(parameter));\r\n const output = await this.client.get(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: RemarksResult = {\r\n isError: false,\r\n items: RemarksUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 追加を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async addAsync(\r\n parameter: RemarksRequest,\r\n selectBoxItem: RemarksSelectBoxItemState,\r\n ): Promise {\r\n\r\n // 実行\r\n const input = new RemarksInput();\r\n input.init(RemarksUtility.toInput(parameter));\r\n const output = await this.client.add(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: RemarksResult = {\r\n isError: false,\r\n items: RemarksUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 更新を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async updateAsync(\r\n parameter: RemarksRequest,\r\n selectBoxItem: RemarksSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.machineTypeId == null ? \"施工機種別 ID\"\r\n : parameter.item.weight == null ? \"No\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new RemarksInput();\r\n input.init(RemarksUtility.toInput(parameter));\r\n const output = await this.client.update(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: RemarksResult = {\r\n isError: false,\r\n items: RemarksUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 削除を行います。\r\n *\r\n * @param parameter パラメーターを指定します。\r\n * @param selectBoxItem セレクトボックスリストを指定します。\r\n * @returns 結果を戻す非同期操作を返します。\r\n */\r\n public async removeAsync(\r\n parameter: RemarksRequest,\r\n selectBoxItem: RemarksSelectBoxItemState,\r\n ): Promise {\r\n\r\n // チェック\r\n const errorItem = parameter.item.id == null ? \"ID\"\r\n : parameter.item.lockVersion == null ? \"LockVersion\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // 実行\r\n const input = new RemarksInput();\r\n input.init(RemarksUtility.toInput(parameter));\r\n const output = await this.client.remove(input);\r\n if (output == null) {\r\n return this.createErrorResult(WebApiAdapter.messageFailedCommunication);\r\n }\r\n else if (output.isError === true) {\r\n return this.createErrorResult(output.errorMessage);\r\n }\r\n\r\n // 正常\r\n const result: RemarksResult = {\r\n isError: false,\r\n items: RemarksUtility.toListItem(selectBoxItem, output.items),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n super(new RemarksClient());\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\n// shared\r\nimport { MasterGenericState, createMasterGenericSlice } from '../shared/create-master-slice';\r\n// type\r\nimport { RemarksAdapter } from '../../adapter/remarks/remarks-adapter';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { RemarksRequest, RemarksResult, RemarksSelectBoxItemState } from '../../adapter/remarks/types';\r\nimport { RemarksListItem } from '../../../pages/Master/Remarks/_types';\r\n\r\n// State の初期値を設定します。\r\nconst initialState: MasterGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {\r\n items: [],\r\n isError: false,\r\n },\r\n isCreating: false,\r\n isSelected: false,\r\n selectedRowItem: void 0,\r\n selectBoxItem: {\r\n MachineType: [],\r\n },\r\n isDialogOpen: false,\r\n\r\n}\r\n\r\n/** 特記事項マスタの Slice を 作成します。*/\r\nexport const RemarksMasterSlice = createMasterGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'Remarks',\r\n initialState: initialState,\r\n reducers: {},\r\n})\r\n\r\n/**\r\n * 非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteAsync = (promise: Promise) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(RemarksMasterSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await promise;\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(RemarksMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n // 正常\r\n dispatch(RemarksMasterSlice.actions.fetchSuccess(result));\r\n\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showSuccessMessage());\r\n\r\n // 新規作成状態解除\r\n dispatch(RemarksMasterSlice.actions.chageCreating(false));\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n dispatch(RemarksMasterSlice.actions.fetchFailure({\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n }));\r\n\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(RemarksMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 画面表示時の初回非同期通信処理を行います。\r\n * @param action\r\n */\r\nexport const onExcuteMountedAsync = () => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // state リセット\r\n dispatch(RemarksMasterSlice.actions.resetState());\r\n\r\n\r\n // 処理中 ON\r\n dispatch(RemarksMasterSlice.actions.fetchStart());\r\n\r\n // 施工機種別\r\n const machineTypeResult = await SharedAdapter.instance.getMachineTypeAsync();\r\n\r\n // 異常確認\r\n if (machineTypeResult.isError) {\r\n // 施工機種別 異常メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(`施工機種別取得エラー:${machineTypeResult.errorMessage}`));\r\n\r\n } else {\r\n // 正常\r\n // リストの項目を store に保存\r\n dispatch(RemarksMasterSlice.actions.getSelectBoxItem({\r\n MachineType: machineTypeResult.items,\r\n }));\r\n\r\n // データ取得\r\n const result = await RemarksAdapter.instance.getAsync(\r\n { item: {} },\r\n { MachineType: machineTypeResult.items }\r\n );\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(RemarksMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(RemarksMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(RemarksMasterSlice.actions.showSuccessMessage());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(RemarksMasterSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n * @param password\r\n */\r\nexport const onConfirmRemoveAsync = (\r\n parameter: RemarksRequest,\r\n selectBoxItem: RemarksSelectBoxItemState,\r\n password: string,\r\n) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(RemarksMasterSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n\r\n } else {\r\n // 正常\r\n // 削除実行\r\n const result = await RemarksAdapter.instance.removeAsync(parameter, selectBoxItem);\r\n\r\n if (result.isError) {\r\n // データ 異常メッセージ\r\n // 異常\r\n dispatch(RemarksMasterSlice.actions.fetchFailure(result));\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(result.errorMessage));\r\n } else {\r\n\r\n dispatch(RemarksMasterSlice.actions.fetchSuccess(result));\r\n\r\n // 正常メッセージ\r\n dispatch(RemarksMasterSlice.actions.showSuccessMessage(\"削除しました。\"));\r\n\r\n // ダイアログを閉じる\r\n dispatch(RemarksMasterSlice.actions.toggleDialog(false));\r\n\r\n // 選択項目のクリア\r\n dispatch(RemarksMasterSlice.actions.clearSelectedItem());\r\n }\r\n }\r\n\r\n } catch (error) {\r\n\r\n //例外\r\n // メッセージ\r\n dispatch(RemarksMasterSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n\r\n // 処理中 OFF\r\n dispatch(RemarksMasterSlice.actions.fetchEnd());\r\n }\r\n\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport { useTheme, fade } from '@material-ui/core/styles';\r\nimport MaterialTable from 'material-table';\r\n// 共通component\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\nimport { MasterTableOptions } from '../../../Shared/MasterTableOptions';\r\nimport MasterTableFrame from '../../../Shared/MasterTableFrame';\r\n// type\r\nimport { RemarksListItem } from \"../../_types\"\r\n\r\n/** 特記事項マスタテーブルの Props を提供します。*/\r\ninterface Props {\r\n /** データソースを表します。 */\r\n dataSource: RemarksListItem[],\r\n /** 行選択のクリックイベントを表します。 */\r\n onRowClick: (rowData: RemarksListItem) => void,\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: RemarksListItem,\r\n}\r\n\r\n/** 特記事項マスタテーブルの State を提供します。*/\r\ninterface State {\r\n /** 選択中の行データを表します。 */\r\n selectedRow?: RemarksListItem,\r\n}\r\n\r\n/** 特記事項マスタテーブルのカラムを表します。 */\r\nconst columns = [\r\n { title: \"施工機種別\", field: \"machineType\", width: 300 },\r\n { title: \"No.\", field: \"weight\", width: 200 },\r\n { title: \"タイトル\", field: \"title\" },\r\n { title: \"項目\", field: \"item\" },\r\n\r\n];\r\n\r\n/** 特記事項マスタテーブルを提供します */\r\nconst RemarksResultTable: React.FC = (props) => {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n\r\n /** State を提供します。 */\r\n const [values, setValues] = useState({\r\n selectedRow: undefined,\r\n });\r\n\r\n useEffect(() => {\r\n setValues({ selectedRow: props.selectedRow });\r\n }, [props.selectedRow])\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const handleRowClick = (rowData: RemarksListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを保持\r\n setValues({ ...values, selectedRow: rowData });\r\n\r\n // Prop 実行\r\n props.onRowClick(rowData);\r\n\r\n };\r\n\r\n return (\r\n \r\n ({\r\n whiteSpace: \"nowrap\",\r\n backgroundColor: (values.selectedRow?.id === rowData.id) ? fade(theme.palette.secondary.main, 0.5) : \"\", // 選択された行の背景色\r\n }),\r\n }}\r\n columns={columns}\r\n data={props.dataSource}\r\n onRowClick={(event, selectedRow) => {\r\n selectedRow && handleRowClick(selectedRow, event)\r\n }}\r\n />\r\n \r\n\r\n );\r\n\r\n};\r\n\r\nexport default RemarksResultTable;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { RemarksMasterSlice } from '../../../../../modules/slice/remarks/remarks-slice';\r\n// type\r\nimport { RemarksListItem } from '../../_types';\r\n// component\r\nimport RemarksResultTable from './RemarksResultTable';\r\n\r\n/** 特記事項マスタテーブルを提供します */\r\nexport const RemarksResultTableContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: RemarksListItem[] = useSelector((state: RootState) => state.remarksMaster.result.items ?? []);\r\n const selectedRow = useSelector((state: RootState) => state.remarksMaster.selectedRowItem);\r\n\r\n /**\r\n * 行選択時のイベント処理を行います。\r\n * @param event\r\n * @param rowData\r\n */\r\n const onRowClick = (rowData: RemarksListItem, event?: React.MouseEvent) => {\r\n // 選択された行データを store に保持\r\n dispatch(RemarksMasterSlice.actions.onSelectedItem({ ...rowData }))\r\n };\r\n\r\n return (\r\n ({ ...item }))} // storeにあるデータをそのまま渡すとErrorになるので複製・参照を切る\r\n onRowClick={onRowClick}\r\n selectedRow={selectedRow}\r\n />\r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { RemarksInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MuiSearchButton from '../../../../../components/Buttons/MuiSearchButton';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n }),\r\n);\r\n\r\n/**特記事項マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 検索ボタンのクリック処理を行います。 */\r\n onClickSearch: ((event: React.MouseEvent, inputItem: RemarksInputItem) => void),\r\n ///** 新規作成ボタンのクリック処理を行います。 */\r\n onClickCreate: (() => void),\r\n /** 点検グループ一覧を表します。*/\r\n machineTypeList: KeyValueItem[],\r\n};\r\n\r\n/**\r\n *特記事項マスタ 検索エリアを提供します。\r\n * */\r\nconst RemarksSearchCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState({});\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (name: keyof RemarksInputItem) => (\r\n event: React.ChangeEvent\r\n ) => {\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? Number.parseInt(target.value, 10) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n // 表示\r\n return (\r\n\r\n \r\n {/* 施工機種別 */}\r\n \r\n {/* Default */}\r\n\r\n {\"未指定\"}\r\n {/* 選択肢 */}\r\n {props.machineTypeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* ボタングループ */}\r\n \r\n {/* 検索ボタン */}\r\n props.onClickSearch(event, values)}\r\n />\r\n {/* 新規登録ボタン */}\r\n props.onClickCreate()}\r\n />\r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default RemarksSearchCondition;\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { RemarksMasterSlice, onExcuteAsync } from '../../../../../modules/slice/remarks/remarks-slice';\r\nimport { RemarksAdapter } from '../../../../../modules/adapter/remarks/remarks-adapter'\r\n// type\r\nimport { RemarksInputItem } from '../../_types';\r\n// component\r\nimport RemarksSearchCondition from './RemarksSearchCondition';\r\n\r\n/**\r\n * 特記事項マスタ 検索エリアを提供します。\r\n * */\r\nexport const RemarksSearchConditionContainer: React.FC<{}> = (props) => {\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const machineTypeList = useSelector((state: RootState) => state.remarksMaster.selectBoxItem.MachineType);\r\n\r\n /** 検索ボタンのクリック処理を行います。 */\r\n const onClickSearch = async (event: React.MouseEvent, inputItem: RemarksInputItem) => {\r\n\r\n // 非同期通信\r\n const promise = RemarksAdapter.instance.getAsync(\r\n {\r\n // セレクトボックスの 0:未選択 を void 0 に変換\r\n item: {\r\n ...inputItem,\r\n machineTypeId: inputItem.machineTypeId === 0 ? void 0 : inputItem.machineTypeId,\r\n }\r\n },\r\n { MachineType: machineTypeList }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickCreate = () => {\r\n dispatch(RemarksMasterSlice.actions.chageCreating(true))\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\r\n// material-ui\r\nimport Box from '@material-ui/core/Box';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n// type\r\nimport { RemarksInputItem, RemarksValidateInputItem } from '../../_types';\r\nimport { KeyValueItem } from '../../../../../_types';\r\n// component\r\nimport MasterDetailButtonGroup from '../../../Shared/MasterDetailButtonGroup';\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ボタン\r\n button: {\r\n minWidth: \"150px\",\r\n margin: \"1rem\",\r\n },\r\n // 削除\r\n deleteButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n\r\n // 更新\r\n updateButton: {\r\n color: theme.palette.warning.main,\r\n },\r\n // テキストエリア\r\n inputItem: {\r\n width: `calc((250px + ${theme.spacing(1)}px) * 2)!important`,\r\n },\r\n }),\r\n);\r\n\r\n/** 特記事項マスタ 検索項目の Props を提供します。 */\r\ninterface Props {\r\n /** 初期値を表します。 */\r\n initialValues: RemarksInputItem,\r\n /** 追加ボタンのクリック処理を行います。 */\r\n onClickAdd: ((event: React.MouseEvent) => void),\r\n /** 更新ボタンのクリック処理を行います。 */\r\n onClickUpdate: ((event: React.MouseEvent) => void),\r\n /** 削除ボタンのクリック処理を行います。 */\r\n onClickRemove: ((event: React.MouseEvent) => void),\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n onClickCancel: ((event: React.MouseEvent) => void),\r\n /** 施工機種別一覧を表します。 */\r\n machineTypeList: KeyValueItem[],\r\n /** 新規作成状態かどうかを表します。 */\r\n isCreating: boolean,\r\n /** 入力値の変更処理を表します。 */\r\n onChange: (event: React.ChangeEvent, name: keyof RemarksInputItem) => void,\r\n /** バリデーション結果を表します。 */\r\n validateError: RemarksValidateInputItem,\r\n\r\n};\r\n\r\n/**\r\n * 特記事項マスタ 詳細エリアを提供します。\r\n * */\r\nconst RemarksDetailCondition: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n // 表示\r\n return (\r\n <>\r\n\r\n \r\n\r\n {/* 施工機種別 */}\r\n props.onChange(event, \"machineTypeId\")}\r\n disabled={!props.isCreating}\r\n required\r\n error={!props.validateError.machineType === false}\r\n helperText={props.validateError.machineType}\r\n >\r\n {/* 選択肢 */}\r\n {props.machineTypeList.map((option) => (\r\n \r\n {option.value}\r\n \r\n )\r\n )}\r\n\r\n \r\n\r\n {/* 重み */}\r\n props.onChange(event, \"weight\")}\r\n InputProps={{\r\n inputProps: {\r\n min: MuiTextFieldUtility.NumericInputMinimum,\r\n max: MuiTextFieldUtility.NumericInputMaximum,\r\n }\r\n }}\r\n required\r\n error={!props.validateError.weight === false}\r\n helperText={props.validateError.weight}\r\n />\r\n\r\n {/* タイトル */}\r\n props.onChange(event, \"title\")}\r\n required\r\n error={!props.validateError.title === false}\r\n helperText={props.validateError.title}\r\n />\r\n\r\n {/* 項目 */}\r\n props.onChange(event, \"item\")}\r\n required\r\n error={!props.validateError.item === false}\r\n helperText={props.validateError.item}\r\n />\r\n\r\n {/* ボタングループ */}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default RemarksDetailCondition;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { RemarksMasterSlice, onExcuteAsync } from '../../../../../modules/slice/remarks/remarks-slice';\r\nimport { RemarksAdapter } from '../../../../../modules/adapter/remarks/remarks-adapter'\r\n// type\r\nimport { RemarksInputItem, RemarksValidateInputItem } from '../../_types';\r\n// component\r\nimport RemarksDetailCondition from './RemarksDetailCondition'\r\nimport { MuiTextFieldUtility } from '../../../../../components/MuiTextField/mui-text-field-utility';\r\n\r\n/**\r\n * 特記事項マスタ 詳細エリアを提供します。\r\n * */\r\nexport const RemarksDetailConditionContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isCreating = useSelector((state: RootState) => state.remarksMaster.isCreating);\r\n const selectedItem = useSelector((state: RootState) => state.remarksMaster.selectedRowItem);\r\n\r\n const machineTypeList = useSelector((state: RootState) => state.remarksMaster.selectBoxItem.MachineType);\r\n\r\n const initialValues: RemarksInputItem = {\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n title: selectedItem?.title,\r\n item: selectedItem?.item,\r\n weight: selectedItem?.weight,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({});\r\n\r\n /** 詳細項目の入力値を表します。 */\r\n const [values, setValues] = useState(initialValues);\r\n\r\n // 行選択時の入力項目更新\r\n useEffect(() => {\r\n setValues(preValue => ({\r\n ...preValue,\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n title: selectedItem?.title,\r\n item: selectedItem?.item,\r\n weight: selectedItem?.weight,\r\n lockVersion: selectedItem?.lockVersion,\r\n }))\r\n\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n }, [selectedItem]);\r\n\r\n /**\r\n * 入力値の変更処理を行います。\r\n * @param name 入力項目を指定します。\r\n */\r\n const onChange = (event: React.ChangeEvent, name: keyof RemarksInputItem) => {\r\n\r\n // 値を選別\r\n const target = event.target;\r\n const value = target.type === \"number\" ? MuiTextFieldUtility.LimitationNumber(Number.parseInt(target.value, 10)) : target.value;\r\n\r\n // 入力項目更新\r\n setValues({ ...values, [name]: value });\r\n };\r\n\r\n /** 新規作成ボタンのクリック処理を行います。 */\r\n const onClickAdd = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = RemarksAdapter.instance.addAsync(\r\n { item: values },\r\n { MachineType: machineTypeList }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 更新ボタンのクリック処理を行います。 */\r\n const onClickUpdate = async (event: React.MouseEvent) => {\r\n // バリデーション\r\n if (onValidateInputItem()) return;\r\n\r\n // 非同期通信\r\n const promise = RemarksAdapter.instance.updateAsync(\r\n { item: values },\r\n { MachineType: machineTypeList }\r\n );\r\n await dispatch(onExcuteAsync(promise));\r\n }\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n // ダイアログ表示\r\n dispatch(RemarksMasterSlice.actions.toggleDialog(true));\r\n }\r\n\r\n /** キャンセルボタンのクリック処理を行います。 */\r\n const onClickCancel = (event: React.MouseEvent) => {\r\n // バリデーション情報クリア\r\n clearValidate();\r\n\r\n dispatch(RemarksMasterSlice.actions.chageCreating(false))\r\n }\r\n\r\n /**\r\n * バリデーション情報のクリアを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const clearValidate = () => {\r\n setValidate(preValue => ({}))\r\n }\r\n\r\n /**\r\n * 入力内容のバリデーションを行います。\r\n * @returns 検証結果を返します。\r\n * */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let machineType = \"\";\r\n let weight = \"\";\r\n let title = \"\";\r\n let item = \"\";\r\n\r\n // 施工機種別\r\n if (!values.machineTypeId) {\r\n machineType = \"施工機種別を選択してください\";\r\n result = true;\r\n }\r\n\r\n // 重み\r\n if (values.weight == null) {\r\n weight = \"No.を入力してください\";\r\n result = true;\r\n }\r\n\r\n // タイトル\r\n if (!values.title) {\r\n title = \"タイトルを入力してください\";\r\n result = true;\r\n }\r\n\r\n // 項目\r\n if (!values.item) {\r\n item = \"項目を入力してください\";\r\n result = true;\r\n }\r\n\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n machineType,\r\n weight,\r\n title,\r\n item,\r\n });\r\n\r\n // 結果\r\n return result;\r\n }\r\n\r\n // 表示\r\n return (\r\n \r\n );\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\nimport ConfirmDialog from '../../../Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { RemarksAdapter } from '../../../../../modules/adapter/remarks/remarks-adapter';\r\nimport { RemarksMasterSlice, onExcuteAsync, onConfirmRemoveAsync } from '../../../../../modules/slice/remarks/remarks-slice';\r\nimport { RemarksRequest } from '../../../../../modules/adapter/remarks/types';\r\n\r\n\r\n/**\r\n * 削除確認ダイアログを表示します。\r\n * @param props\r\n */\r\nexport const ConfirmDialogContainer: React.FC<{}> = (props) => {\r\n\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.remarksMaster.isDialogOpen ?? false);\r\n const selectedItem = useSelector((state: RootState) => state.remarksMaster.selectedRowItem ?? null);\r\n const selectBoxItem = useSelector((state: RootState) => state.remarksMaster.selectBoxItem);\r\n\r\n /** 削除ボタンのクリック処理を行います。 */\r\n const onClickRemove = async (event: React.MouseEvent, pwassword: string) => {\r\n\r\n // 入力項目を作成\r\n const parameter: RemarksRequest = {\r\n item: {\r\n id: selectedItem?.id,\r\n machineTypeId: selectedItem?.machineTypeId,\r\n lockVersion: selectedItem?.lockVersion,\r\n }\r\n }\r\n\r\n // 非同期通信\r\n await dispatch(onConfirmRemoveAsync(parameter, selectBoxItem, pwassword))\r\n }\r\n\r\n /**\r\n   * ダイアログを非表示にします。\r\n   * @param isOpne\r\n   */\r\n const closeDialog = () => {\r\n dispatch(RemarksMasterSlice.actions.toggleDialog(false));\r\n };\r\n\r\n return (\r\n <>\r\n {selectedItem &&\r\n \r\n }\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeMasterPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\nimport { RemarksMasterSlice, onExcuteMountedAsync } from '../../../modules/slice/remarks/remarks-slice';\r\n// component\r\nimport { RemarksResultTableContainer } from './components/TableContent/RemarksResultTableContainer';\r\nimport { RemarksSearchConditionContainer } from './components/SearchContent/RemarksSearchConditionContainer';\r\nimport { RemarksDetailConditionContainer } from './components/DetailContent/RemarksDetailConditionContainer';\r\nimport { ConfirmDialogContainer } from './components/ConfirmDialog/ConfirmDialogContainer';\r\nimport MasterLayout from '../Shared/MasterLayout';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { AppTitle } from '../../Shared/app-title';\r\n\r\n\r\n/**\r\n * 特記事項マスタ画面を提供します。\r\n * */\r\nconst RemarksPage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(changeMasterPageHeader(AppTitle.masterRemarks.title));\r\n\r\n // 初回マウント時にデータを取得する\r\n dispatch(onExcuteMountedAsync());\r\n }, [dispatch]);\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.remarksMaster.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.remarksMaster.isShowMessage);\r\n const message = useSelector((state: RootState) => state.remarksMaster.message);\r\n const isCreating = useSelector((state: RootState) => state.remarksMaster.isCreating);\r\n const isSelected = useSelector((state: RootState) => state.remarksMaster.isSelected);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(RemarksMasterSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n\r\n }\r\n table={}\r\n detail={}\r\n isCreating={isCreating}\r\n isSelected={isSelected}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default RemarksPage;\r\n","// 各画面\r\nimport MaintenanceItemPage from '../../../MaintenanceItem';\r\nimport MaintenanceDivisioinPage from '../../../MaintenanceDivision';\r\nimport MachinePage from '../../../Machine';\r\nimport InspectionDivisionPage from '../../../InspectionDivision';\r\nimport InspectionItemPage from '../../../InspectionItem';\r\nimport MachineModelPage from '../../../MachineModel';\r\nimport ManufacturerPage from '../../../Manufacturer';\r\nimport MethodPage from '../../../Method';\r\nimport UserPage from '../../../User';\r\nimport RemarksPage from '../../../Remarks';\r\n\r\nimport { AppTitle } from '../../../../Shared/app-title';\r\nimport { AppUrl } from '../../../../Shared/app-url';\r\nimport { TabItem } from '../../_types';\r\n\r\n/** マスタ系タブのアイテムを提供します。 */\r\nexport class MasterPageTabItems {\r\n /** 施工機マスタ */\r\n public static readonly masterMachine: TabItem = {\r\n label: AppTitle.masterMachine.title,\r\n path: AppUrl.masterMachine.path,\r\n tabValue: AppUrl.masterMachine.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: MachinePage,\r\n }\r\n /** 型式マスタ */\r\n public static readonly masterModel: TabItem = {\r\n label: AppTitle.masterModel.title,\r\n path: AppUrl.masterModel.path,\r\n tabValue: AppUrl.masterModel.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: MachineModelPage,\r\n }\r\n /** メーカーマスタ */\r\n public static readonly masterManufacturer: TabItem = {\r\n label: AppTitle.masterManufacturer.title,\r\n path: AppUrl.masterManufacturer.path,\r\n tabValue: AppUrl.masterManufacturer.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: ManufacturerPage,\r\n }\r\n /** 工法マスタ */\r\n public static readonly masterMethod: TabItem = {\r\n label: AppTitle.masterMethod.title,\r\n path: AppUrl.masterMethod.path,\r\n tabValue: AppUrl.masterMethod.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: MethodPage,\r\n }\r\n /** 整備区分マスタ */\r\n public static readonly masterMaintenanceDivisioin: TabItem = {\r\n label: AppTitle.masterMaintenanceDivisioin.title,\r\n path: AppUrl.masterMaintenanceDivisioin.path,\r\n tabValue: AppUrl.masterMaintenanceDivisioin.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: MaintenanceDivisioinPage,\r\n }\r\n /** 整備項目マスタ */\r\n public static readonly masterMaintenanceItem: TabItem = {\r\n label: AppTitle.masterMaintenanceItem.title,\r\n path: AppUrl.masterMaintenanceItem.path,\r\n tabValue: AppUrl.masterMaintenanceItem.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: MaintenanceItemPage,\r\n }\r\n /** 特記事項マスタ */\r\n public static readonly masterRemarksItem: TabItem = {\r\n label: AppTitle.masterRemarks.title,\r\n path: AppUrl.masterRemarks.path,\r\n tabValue: AppUrl.masterRemarks.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: RemarksPage,\r\n }\r\n /** 点検区分マスタ */\r\n public static readonly masterInspectionDivision: TabItem = {\r\n label: AppTitle.masterInspectionDivision.title,\r\n path: AppUrl.masterInspectionDivision.path,\r\n tabValue: AppUrl.masterInspectionDivision.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: InspectionDivisionPage,\r\n }\r\n /** 点検項目マスタ */\r\n public static readonly masterInspectionItem: TabItem = {\r\n label: AppTitle.masterInspectionItem.title,\r\n path: AppUrl.masterInspectionItem.path,\r\n tabValue: AppUrl.masterInspectionItem.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: InspectionItemPage,\r\n }\r\n /** ユーザーマスタ */\r\n public static readonly masterUser: TabItem = {\r\n label: AppTitle.masterUser.title,\r\n path: AppUrl.masterUser.path,\r\n tabValue: AppUrl.masterUser.path.replace(`${AppUrl.master.path}/`, \"\"),\r\n component: UserPage,\r\n }\r\n}\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// router\r\nimport { Route } from 'react-router-dom';\r\n// material-ui\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Box from '@material-ui/core/Box';\r\nimport { createStyles, makeStyles, Theme, fade } from '@material-ui/core/styles';\r\n// 各画面ルート\r\nimport { MasterPageTabItems } from './TabListUtility'\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n },\r\n // タブ\r\n tab: {\r\n color: theme.palette.text.secondary,\r\n // アクティブタブ\r\n \"& .Mui-selected\": {\r\n color: theme.palette.primary.contrastText,\r\n backgroundColor: fade(theme.palette.primary.main, 0.8),\r\n },\r\n },\r\n }),\r\n);\r\n\r\n/** マスタ画面タブリストの Props を提供します。*/\r\ninterface Props {\r\n /** 選択されているタブを表します。 */\r\n selectedTab: string,\r\n /** タブクリック時のイベントを表します。 */\r\n onTabClick: (event: React.ChangeEvent<{}>, selectedTab: string) => void,\r\n}\r\n\r\n/**\r\n * マスタ画面タブリストを表示します。\r\n * */\r\nexport function TabList(props: Props) {\r\n\r\n /** Style を表します。 */\r\n const classes = useStyles();\r\n\r\n /** State を表します。*/\r\n const [path, setPath] = useState(MasterPageTabItems.masterMachine.tabValue);\r\n\r\n\r\n React.useEffect(() => {\r\n setPath(props.selectedTab);\r\n }, [props])\r\n\r\n\r\n return (\r\n <>\r\n \r\n {/* タブ */}\r\n \r\n \r\n\r\n {/* 施工機マスタ */}\r\n \r\n {/* 型式マスタ */}\r\n \r\n {/* メーカーマスタ */}\r\n \r\n {/* 工法マスタ */}\r\n \r\n {/* 整備区分マスタ */}\r\n \r\n {/* 整備項目マスタ */}\r\n \r\n {/* 特記事項マスタ */}\r\n \r\n {/* 点検区分マスタ */}\r\n \r\n {/* 点検項目マスタ */}\r\n \r\n {/* ユーザーマスタ */}\r\n \r\n \r\n \r\n {/* コンテンツ */}\r\n \r\n {/* 施工機マスタ */}\r\n \r\n {/* 型式マスタ */}\r\n \r\n {/* メーカーマスタ */}\r\n \r\n {/* 工法マスタ */}\r\n \r\n {/* 整備区分マスタ */}\r\n \r\n {/* 整備項目マスタ */}\r\n \r\n {/* 特記事項マスタ */}\r\n \r\n {/* 点検区分マスタ */}\r\n \r\n {/* 点検項目マスタ */}\r\n \r\n {/* ユーザーマスタ */}\r\n \r\n \r\n \r\n \r\n\r\n );\r\n\r\n};\r\n","// react\r\nimport * as React from 'react';\r\n// router\r\nimport { useHistory, useRouteMatch, useParams } from 'react-router-dom';\r\n\r\n// 各画面ルート\r\nimport { TabList } from './components/TabList/TabList';\r\nimport { AppUrl } from '../../Shared/app-url';\r\n\r\n/** Params を提供します。 */\r\ninterface Params {\r\n tab: string,\r\n}\r\n\r\n/**\r\n * マスタ管理画面 を提供します。\r\n * */\r\nexport function MasterTab() {\r\n\r\n /** Hisotry を表します。*/\r\n const history = useHistory();\r\n\r\n /** ルート情報を表します。 */\r\n const match = useRouteMatch(`${AppUrl.master.path}/:tab`);\r\n\r\n /** URLパラメータのタブを表します。 */\r\n const { tab } = useParams();\r\n\r\n /**\r\n * タブ選択時の処理を行います。\r\n * @param event\r\n * @param selectedTab\r\n */\r\n const handleChange = (event: React.ChangeEvent<{}>, selectedTab: string) => {\r\n match && history.push(`${AppUrl.master.path}/${selectedTab}`);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n\r\n );\r\n\r\n};\r\n","import * as React from 'react';\r\nimport { MasterTab } from './MasterTab';\r\nimport { HeaderPage } from '../Shared/HeaderPage/HeaderPage';\r\n\r\n/**\r\n * 系マスタ画面を表示します。\r\n */\r\nexport const MasterPage: React.FC<{}> = () => {\r\n return (\r\n } />\r\n );\r\n}\r\n","import { Dispatch } from 'redux';\r\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\r\nimport { GenericState, createGenericSlice } from '../shared/create-generic-slice';\r\nimport { AccountAdapter } from '../../adapter/account/account-adapter'\r\nimport { SignInRequest } from '../../adapter/account/types';\r\nimport { SigninUtility } from './signin-slice-utility';\r\nimport { AppUrl } from '../../../pages/Shared/app-url';\r\n\r\n/** サインイン画面 State を提供します。 */\r\ninterface SigninSliceState {\r\n isSignedIn: boolean;\r\n}\r\n\r\n// State の初期値を設定します。\r\nconst initialState: GenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: { isSignedIn: SigninUtility.getStorageIsSignedIn() },\r\n}\r\n\r\n/** サインイン画面 Slice を 提供します。*/\r\nexport const SigninSlice = createGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'Signin',\r\n initialState: initialState,\r\n reducers: {\r\n\r\n /**\r\n * サインイン情報を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n setIsSignedIn(state: GenericState, action: PayloadAction) {\r\n state.result.isSignedIn = action.payload;\r\n },\r\n },\r\n})\r\n\r\n/**\r\n * サインイン処理を行います。\r\n * @param parameter\r\n */\r\nexport const onSigninAsync = (parameter: SignInRequest) => async (dispatch: Dispatch) => {\r\n\r\n try {\r\n // 処理中 ON\r\n dispatch(SigninSlice.actions.fetchStart());\r\n\r\n // 通信処理\r\n const result = await await AccountAdapter.instance.signInAsync(parameter);\r\n\r\n if (result.errorMessage) {\r\n // 異常\r\n // メッセージ\r\n dispatch(SigninSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n // ストレージ更新\r\n SigninUtility.setStorageIsSignedIn();\r\n\r\n // state 更新\r\n dispatch(SigninSlice.actions.setIsSignedIn(true));\r\n }\r\n\r\n } catch (error) {\r\n // 例外\r\n // メッセージ\r\n dispatch(SigninSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(SigninSlice.actions.fetchEnd());\r\n }\r\n}\r\n","export default __webpack_public_path__ + \"static/media/LogoFudo.3f9e41f8.svg\";","export default __webpack_public_path__ + \"static/media/LogoST.a4136786.svg\";","// react\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\n// material-ui\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { Container, Box, Paper, Typography, TextField, Button, IconButton, InputAdornment } from '@material-ui/core';\r\nimport { Visibility, VisibilityOff, AccountCircle, Lock } from '@material-ui/icons';\r\n// Logo\r\nimport LogoFudo from '../../../../../assets/LogoFudo.svg';\r\nimport LogoST from '../../../../../assets/LogoST.svg';\r\n\r\n/** スタイル */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // ルート\r\n root: {\r\n height: \"100vh\",\r\n display: \"flex\",\r\n },\r\n // コンテナ\r\n container: {\r\n margin: \"auto\",\r\n },\r\n\r\n // ロゴ\r\n logo: {\r\n width: \"200px\",\r\n height: \"200px\",\r\n margin: theme.spacing(1),\r\n },\r\n // カード\r\n paper: {\r\n margin: \"auto\",\r\n padding: theme.spacing(4),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n // フォーム\r\n form: {\r\n width: \"100%\",\r\n marginTop: theme.spacing(1),\r\n },\r\n // 入力項目\r\n inputItem: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n // ボタン\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n }\r\n\r\n }),\r\n);\r\n\r\n\r\n/** サインイン画面の State を提供します。*/\r\nexport interface SinginFormInputItem {\r\n /** id を表します。 */\r\n id: string;\r\n /** パスワードを表します。 */\r\n password: string;\r\n}\r\n\r\n/** サインイン画面の State を提供します。*/\r\ninterface SinginFormValidateInputItem {\r\n /** id を表します。 */\r\n id: string;\r\n /** パスワードを表します。 */\r\n password: string;\r\n}\r\n\r\n/** サインイン Props */\r\ninterface Props {\r\n /** 削除ボタンクリック時の処理を表します。 */\r\n onSigninClick: (inputItem: SinginFormInputItem) => void,\r\n};\r\n\r\n/**\r\n * サインイン画面を提供します。\r\n * */\r\nconst SigninForm: React.FC = props => {\r\n /** スタイルクラスを表します。 */\r\n const classes = useStyles();\r\n\r\n /** 入力内容 */\r\n const [inputItem, setInputItem] = useState({ id: \"\", password: \"\" });\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({ id: \"\", password: \"\" });\r\n\r\n /** パスワードの表示状態を表します。 */\r\n const [isShowPassword, setIsShowPassword] = useState(false);\r\n\r\n /**\r\n * 入力項目 内容変更時のイベント処理を行います。\r\n * */\r\n const onChange = (name: keyof SinginFormInputItem) => (event: React.ChangeEvent) => {\r\n\r\n const value = event.target.value;\r\n\r\n // 入力項目更新\r\n setInputItem({ ...inputItem, [name]: value });\r\n };\r\n\r\n /** パスワード表示非表示ボタン クリック時のイベント処理を行います。*/\r\n const handleClickShowPassword = () => {\r\n setIsShowPassword(preValue => !preValue);\r\n };\r\n\r\n /**\r\n * パスワード表示非表示ボタン マウスダウン時のイベント処理を行います。\r\n * @param event\r\n */\r\n const handleMouseDownPassword = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n };\r\n\r\n\r\n /**\r\n *サインインボタンのクリック処理を行います。\r\n * @param event\r\n */\r\n const onSignin = (event: React.MouseEvent | React.FormEvent) => {\r\n event.preventDefault();\r\n // バリデーション\r\n const isError = onValidateInputItem()\r\n\r\n if (isError === false) {\r\n props.onSigninClick(inputItem);\r\n }\r\n }\r\n\r\n /** 入力内容のバリデーションを行います。 */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let idError = \"\";\r\n let passError = \"\";\r\n\r\n // id\r\n if (!inputItem.id) {\r\n idError = \"ユーザー id を入力してください\";\r\n result = true;\r\n }\r\n\r\n // パスワード\r\n if (!inputItem.password) {\r\n passError = \"パスワードを入力してください\";\r\n result = true;\r\n }\r\n\r\n // エラー文字をセット\r\n setValidate({\r\n id: idError,\r\n password: passError,\r\n });\r\n\r\n // 結果\r\n return result;\r\n\r\n }\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n\r\n {/*ロゴ*/}\r\n \r\n \"LogoFudo\"\r\n \"LogoST\"\r\n \r\n\r\n {/* タイトル */}\r\n 施工機保全システム\r\n\r\n {/* フォーム */}\r\n
onSignin(event)} noValidate>\r\n\r\n {/* ID */}\r\n \r\n \r\n \r\n ),\r\n }}\r\n required\r\n error={!validate.id === false}\r\n helperText={validate.id}\r\n />\r\n\r\n {/* パスワード */}\r\n \r\n \r\n \r\n ),\r\n endAdornment: (\r\n \r\n \r\n {isShowPassword ? : }\r\n \r\n \r\n )\r\n }}\r\n required\r\n error={!validate.password === false}\r\n helperText={validate.password}\r\n />\r\n\r\n {/* サインイン */}\r\n \r\n サインイン\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n );\r\n}\r\n\r\nexport default SigninForm;\r\n","// react\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n// router\r\nimport { useHistory, RouteComponentProps } from 'react-router-dom';\r\n//redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport SigninForm, { SinginFormInputItem } from './SigninForm';\r\nimport { onSigninAsync } from '../../../../../modules/slice/signin/signin-slice';\r\nimport { AppUrl } from '../../../../Shared/app-url'\r\nimport { onGetAuthenticatedUserAsync } from '../../../../../modules/slice/authentication/authentication-slice';\r\n/**\r\n * サインイン画面を提供します。\r\n * */\r\nexport const SigninFormContainer: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n /** サインインボタン クリック時の処理を行います。 */\r\n const onSigninClickAsync = async (inputItem: SinginFormInputItem) => {\r\n // 認証\r\n await dispatch(onSigninAsync({\r\n userId: inputItem.id,\r\n password: inputItem.password,\r\n }));\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// redux\r\nimport { useHistory, Redirect } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { SigninSlice } from '../../../modules/slice/signin/signin-slice';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\n// component\r\nimport { SigninFormContainer } from './components/SigninForm/SigninFormContainer';\r\nimport { AppUrl } from '../../Shared/app-url';\r\n\r\n/** sサインイン画面 を表示します。*/\r\nexport const SigninPage: React.FC<{}> = () => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.signin.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.signin.isShowMessage);\r\n const message = useSelector((state: RootState) => state.signin.message);\r\n // redux store\r\n const isSignedIn: boolean = useSelector((state: RootState) => state.signin.result.isSignedIn);\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(SigninSlice.actions.hideMessage());\r\n };\r\n\r\n return (\r\n\r\n // 既にサインイン認証済であれば施工機管理状況一覧に遷移\r\n isSignedIn\r\n ? ()\r\n : (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* サインインフォーム画面 */}\r\n \r\n\r\n \r\n )\r\n )\r\n}\r\n","import * as React from 'react';\r\nimport { SigninPage } from './Signin';\r\n\r\n/**\r\n * サインイン画面(Account)を表します。\r\n */\r\nexport const AccountPage: React.FC<{}> = () => {\r\n return (\r\n \r\n );\r\n};\r\n","/** S3 ファイルリスト種別を提供します。 */\r\nexport const FileListType = {\r\n //Png: \"png\",\r\n //Jpg: \"jpg\",\r\n //Jpeg: \"jpeg\",\r\n Pdf: \"pdf\",\r\n Other: \"未定義\",\r\n} as const;\r\nexport type FileListType = typeof FileListType[keyof typeof FileListType];\r\nexport type S3ItemListType = FileListType | \"フォルダ\";\r\n\r\n/** ホームディレクトリを提供します */\r\nexport const HomeDirectoryType = {\r\n Document: \"document\",\r\n OnlineHelp: \"online-help\"\r\n} as const;\r\nexport type HomeDirectoryType = typeof HomeDirectoryType[keyof typeof HomeDirectoryType];\r\n\r\n/** ディレクトリのインターフェイスを提供します。 */\r\nexport interface DirectoryItem {\r\n /** ルートディレクトリを表します。 */\r\n root: string;\r\n /** ホームディレクトリを表します。 */\r\n home: HomeDirectoryType,\r\n /** サブディレクトリを表します。 */\r\n sub: string[]\r\n}\r\n\r\n/** S3 ファイルリスト テーブル項目のインターフェイスを提供します。*/\r\nexport interface S3FileListItem {\r\n /** キー を表します。 */\r\n readonly key: string;\r\n /** 名前 を表します。 */\r\n readonly name: string;\r\n /** タイプ を表します。 */\r\n readonly type: S3ItemListType;\r\n /** サイズ を表します。 */\r\n readonly size: string;\r\n /** 最終更新日時 を表します。 */\r\n readonly lastModified: string;\r\n}\r\n\r\n/** ファイル情報を提供します。 */\r\nexport interface FileInfo {\r\n /** キー項目名を表します。 */\r\n key: string;\r\n /** ファイルを表します。 */\r\n file?: File\r\n}\r\n\r\n/** S3クライアント Put 結果ファイル情報を提供します。 */\r\nexport interface PutedFileItem {\r\n /** キー を表します。 */\r\n key: string;\r\n /** エラー有無を表します。 */\r\n isError: boolean;\r\n /** メッセージ を表します。 */\r\n message?: string;\r\n}\r\n\r\n/** S3クライアント 削除成功ファイル情報を提供します。 */\r\nexport interface DeletedFileItem {\r\n /** キー を表します。 */\r\n key: string;\r\n /** ディレクトリ名を表します。 */\r\n directoryName: string;\r\n /** バージョンID を表します。 */\r\n versionId?: string;\r\n /** コード を表します。 */\r\n code?: string;\r\n /** メッセージ を表します。 */\r\n message?: string;\r\n}\r\n\r\n\r\n/**\r\n * MIME タイプを表す列挙値を提供します。\r\n * refer : https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\r\n*/\r\nconst MineTypes = {\r\n \".aac\": \"audio/aac\",\r\n \".abw\": \"application/x-abiword\",\r\n \".arc\": \"application/x-freearc\",\r\n \".avi\": \"video/x-msvideo\",\r\n \".azw\": \"application/vnd.amazon.ebook\",\r\n \".bin\": \"application/octet-stream\",\r\n \".bmp\": \"image/bmp\",\r\n \".bz\": \"application/x-bzip\",\r\n \".bz2\": \"application/x-bzip2\",\r\n \".csh\": \"application/x-csh\",\r\n \".css\": \"text/css\",\r\n \".csv\": \"text/csv\",\r\n \".doc\": \"application/msword\",\r\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n \".eot\": \"application/vnd.ms-fontobject\",\r\n \".epub\": \"application/epub+zip\",\r\n \".gz\": \"application/gzip\",\r\n \".gif\": \"image/gif\",\r\n \".htm\": \"text/html\",\r\n \".html\": \"text/html\",\r\n \".ico\": \"image/vnd.microsoft.icon\",\r\n \".ics\": \"text/calendar\",\r\n \".jar\": \"application/java-archive\",\r\n \".jpeg\": \".jpg\",\r\n \".js\": \"text/javascript\",\r\n \".json\": \"application/json\",\r\n \".jsonld\": \"application/ld+json\",\r\n \".mid\": \".midi\",\r\n \".mjs\": \"text/javascript\",\r\n \".mp3\": \"audio/mpeg\",\r\n \".mpeg\": \"video/mpeg\",\r\n \".mpkg\": \"application/vnd.apple.installer+xml\",\r\n \".odp\": \"application/vnd.oasis.opendocument.presentation\",\r\n \".ods\": \"application/vnd.oasis.opendocument.spreadsheet\",\r\n \".odt\": \"application/vnd.oasis.opendocument.text\",\r\n \".oga\": \"audio/ogg\",\r\n \".ogv\": \"video/ogg\",\r\n \".ogx\": \"application/ogg\",\r\n \".opus\": \"audio/opus\",\r\n \".otf\": \"font/otf\",\r\n \".png\": \"image/png\",\r\n \".pdf\": \"application/pdf\",\r\n \".php\": \"application/php\",\r\n \".ppt\": \"application/vnd.ms-powerpoint\",\r\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\r\n \".rar\": \"application/vnd.rar\",\r\n \".rtf\": \"application/rtf\",\r\n \".sh\": \"application/x-sh\",\r\n \".svg\": \"image/svg+xml\",\r\n \".swf\": \"application/x-shockwave-flash\",\r\n \".tar\": \"application/x-tar\",\r\n \".tif\": \"image/tiff\",\r\n \".tiff\": \"image/tiff\",\r\n \".ts\": \"video/mp2t\",\r\n \".ttf\": \"font/ttf\",\r\n \".txt\": \"text/plain\",\r\n \".vsd\": \"application/vnd.visio\",\r\n \".wav\": \"audio/wav\",\r\n \".weba\": \"audio/webm\",\r\n \".webm\": \"video/webm\",\r\n \".webp\": \"image/webp\",\r\n \".woff\": \"font/woff\",\r\n \".woff2\": \"font/woff2\",\r\n \".xhtml\": \"application/xhtml+xml\",\r\n \".xls\": \"application/vnd.ms-excel\",\r\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n \".xml\": \"XML\",\r\n \".xul\": \"application/vnd.mozilla.xul+xml\",\r\n \".zip\": \"application/zip\",\r\n \".3gp\": \"video/3gpp\",\r\n \".3g2\": \"video/3gpp2\",\r\n \".7z\": \"application/x-7z-compressed\"\r\n} as const;\r\ntype MineTypes = typeof MineTypes[keyof typeof MineTypes];\r\n","// S3\r\nimport { GetObjectCommandOutput, ListObjectsOutput, _Error, DeletedObject } from \"@aws-sdk/client-s3\";\r\nimport { FileListType, S3FileListItem, DeletedFileItem, DirectoryItem, HomeDirectoryType } from \"../../../pages/FileManager/FileManage/_types\";\r\nimport path from 'path';\r\nimport { SharedUtility } from \"../../shared/shared-utility\";\r\nimport { S3DeleteResult } from \"./types\";\r\n\r\n/**\r\n * `ファイル管理` 関連の ユーティリティ機能を提供します。\r\n */\r\nexport class FileManageUtility {\r\n\r\n /** ルートディレクトリ名を表します。 */\r\n public static readonly rootDirectory: string = \"bms\";\r\n\r\n /** 操作許可するファイル拡張子を表します。*/\r\n // 小文字指定\r\n public static readonly allowExts: string[] = [\"pdf\"];\r\n\r\n /** オンラインヘルプのディレクトリ名一覧を表します。*/\r\n // 以下の並び順でソートする。リストに含まれないフォルダは表示しない。\r\n public static onlineHelpList: ReadonlyArray = [\r\n \"メインメニュー\",\r\n \"日常点検\",\r\n \"週間・月例点検\",\r\n \"完了時点検\",\r\n \"整備(ベースマシン)\",\r\n \"整備(オーガー)\",\r\n \"整備(昇降装置)\",\r\n \"その他報告\",\r\n \"施工機モニタ―\",\r\n \"USB出力\",\r\n \"バージョン情報\",\r\n \"アプリケーション設定\",\r\n \"管理者設定\",\r\n ];\r\n\r\n /**\r\n * 末尾のスラッシュを削除します。\r\n * @param url URLを指定します。\r\n */\r\n public static removeTrailingSlash(url: string) {\r\n return url.endsWith(\"/\") ? url.substr(0, url.length - 1) : url\r\n }\r\n\r\n /**\r\n * 末尾にスラッシュを付与します。\r\n * @param url URLを指定します。\r\n */\r\n public static addTrailingSlash(url: string) {\r\n return url.endsWith(\"/\") ? url : url + \"/\";\r\n }\r\n\r\n /**\r\n * ディレクトリのKey情報に変換します。\r\n * @param item ディレクトリ情報を指定します。\r\n */\r\n public static toDirectoryKey(directoryItem: DirectoryItem): string {\r\n return path.join(directoryItem.root, directoryItem.home, ...directoryItem.sub);\r\n } \r\n\r\n /**\r\n * ディレクトリ情報に変換します。\r\n * @param url URLを指定します。\r\n */\r\n public static toDirItem(url: string): DirectoryItem | null {\r\n const directoryNames = url.replace(/\\/$/, \"\").split(\"/\");\r\n\r\n // 先頭 = ルートディレクトリの取得\r\n const root = directoryNames.shift(); \r\n if (root !== this.rootDirectory) return null; \r\n\r\n const ret = Object.entries(HomeDirectoryType).find(([key, value]) => value.localeCompare(directoryNames[0], undefined, { sensitivity: \"accent\" }) === 0);\r\n if (ret == null) return null;\r\n\r\n directoryNames.shift();\r\n\r\n return {\r\n root,\r\n home: ret[1],\r\n sub: directoryNames,\r\n };\r\n }\r\n\r\n /**\r\n * ファイル拡張子を取得します。\r\n * @param filename ファイル名を指定します。\r\n * @returns 拡張子を返します。\r\n */\r\n public static getExt(filename: string) {\r\n var pos = filename.lastIndexOf(\".\");\r\n if (pos === -1) return \"\";\r\n return filename.slice(pos + 1);\r\n }\r\n\r\n /**\r\n * 許可された拡張子かどうかを判定します。\r\n * @param filename ファイル名を指定します。\r\n * @param allowExts 許可する拡張子の一覧を指定します。\r\n */\r\n public static checkExt(filename: string, allowExts: string[]) {\r\n var ext = FileManageUtility.getExt(filename).toLowerCase();\r\n return !(allowExts.indexOf(ext) === -1);\r\n }\r\n\r\n /**\r\n * byte 単位のファイルサイズの表記を変換します。\r\n * @param size サイズを指定します。\r\n * @param stdByte 基準バイトサイズを指定します。\r\n * @param decimal 有効小数点を指定します。\r\n * @returns 変換結果を返します。変換に失敗した場合、 null を返します\r\n */\r\n public static ag2fileSizeOpt(fileSize: string, isStdByte: boolean = false, decimal: number = 1): string | null {\r\n let result: string;\r\n\r\n let thisSize = Number(fileSize);\r\n if (!Number.isInteger(thisSize)) return null;\r\n if (!Number.isInteger(decimal) || decimal < 0) return null;\r\n\r\n //基準のバイト数と単位の配列を設定\r\n const stdByte = isStdByte ? 1024 : 1000;\r\n const fileUnit = isStdByte\r\n ? ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\r\n : ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n\r\n let unitIndex = 0;\r\n if (thisSize >= stdByte) {\r\n let sizeTemp = (thisSize / stdByte);\r\n for (let i = 0; sizeTemp >= 1 && i < fileUnit.length; i++) {\r\n unitIndex = i;\r\n thisSize = sizeTemp;\r\n sizeTemp /= stdByte;\r\n }\r\n result = (Math.round(thisSize * (10 ** decimal)) / (10 ** decimal)) + ' ' + fileUnit[unitIndex];\r\n } else {\r\n result = thisSize + ' ' + (thisSize === 1 ? 'byte' : 'bytes');\r\n }\r\n\r\n //変換した表記の文字列を返す\r\n return result;\r\n }\r\n\r\n /**\r\n * 読み込み可能なストリームを取得します。\r\n * @param response\r\n */\r\n public static asStream(response: GetObjectCommandOutput): ReadableStream {\r\n return response.Body as ReadableStream;\r\n };\r\n\r\n /**\r\n * Blob を取得します。\r\n * @param response\r\n */\r\n public static async asBlob(response: GetObjectCommandOutput): Promise {\r\n return await new Response(FileManageUtility.asStream(response)).blob();\r\n };\r\n\r\n /**\r\n * Blob オブジェクトをダウンロードします。\r\n * @param blob\r\n * @param filename\r\n */\r\n public static downloadBlobObject(blob: Blob, filename: string) {\r\n const objectUrl = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.style.display = 'none';\r\n a.href = objectUrl;\r\n a.download = filename;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n window.URL.revokeObjectURL(objectUrl);\r\n }\r\n\r\n /**\r\n * ファイル タイプを取得します。\r\n * @param fileName ファイル名を指定します。\r\n */\r\n public static getFileType(fileName: string): FileListType {\r\n // 拡張子の取得\r\n const extension = fileName.split('.').pop();\r\n let result: FileListType = FileListType.Other;\r\n\r\n if (extension != null) {\r\n result = Object.values(FileListType).find((value) => {\r\n return extension.localeCompare(value, undefined, { sensitivity: \"accent\" }) === 0\r\n }) ?? FileListType.Other;\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * 項目を一覧用の項目に変換します。\r\n *\r\n * @param items 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toListItem(items?: ListObjectsOutput): S3FileListItem[] {\r\n let result: S3FileListItem[] = [];\r\n if (items?.Contents == null) {\r\n return result;\r\n };\r\n\r\n // フォルダ\r\n if (items.CommonPrefixes != null) {\r\n for (const source of items.CommonPrefixes) {\r\n // 異常値はスキップ\r\n if (source.Prefix == null) {\r\n continue;\r\n };\r\n const item: S3FileListItem = {\r\n key: source.Prefix,\r\n name: items.Prefix ? source.Prefix.replace(items.Prefix, \"\") : \"\",\r\n type: \"フォルダ\",\r\n lastModified: \"--\",\r\n size: \"--\",\r\n };\r\n result.push(item);\r\n };\r\n };\r\n // ソート\r\n if (items.Prefix && FileManageUtility.isOnelineHelpRoot(items.Prefix)) {\r\n const temp = FileManageUtility.SortingListFiles(result);\r\n result.length = 0;\r\n result = temp.concat();\r\n\r\n } else {\r\n // ファイル(オンラインヘルプのルートフォルダ以外)\r\n for (const source of items.Contents) {\r\n // 異常値, フォルダ, 未許可拡張子はスキップ\r\n if (source.Key == null\r\n || source.Key === items.Prefix\r\n || !FileManageUtility.checkExt(source.Key, FileManageUtility.allowExts)) {\r\n continue;\r\n };\r\n\r\n const item: S3FileListItem = {\r\n key: source.Key,\r\n name: items.Prefix ? source.Key.replace(items.Prefix, \"\") : \"\",\r\n type: FileManageUtility.getFileType(source.Key),\r\n lastModified: source.LastModified ? SharedUtility.toDateTimeString(source.LastModified) : \"\",\r\n size: FileManageUtility.ag2fileSizeOpt(source.Size?.toString() ?? \"\") ?? \"\",\r\n };\r\n result.push(item);\r\n };\r\n // 名前降順ソート\r\n result.sort((a, b) => a.name.toLocaleLowerCase() > b.name.toLocaleLowerCase() ? 1 : -1);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 正常ファイル情報に変換します。\r\n * @param directoryName ディレクトリ名を指定します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toSuccessFileItem(directoryName: string, source?: DeletedObject[]): DeletedFileItem[] {\r\n const result: DeletedFileItem[] = [];\r\n if (source == null) return result;\r\n source.forEach(item => {\r\n if (item.Key) {\r\n result.push({\r\n key: item.Key.replace(directoryName, \"\"),\r\n directoryName,\r\n });\r\n };\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * エラーファイル情報に変換します。\r\n * @param directoryName ディレクトリ名を指定します。\r\n * @param source 変換元の値を指定します。\r\n * @returns 変換結果を返します。\r\n */\r\n public static toErrorFileItem(directoryName: string, source?: _Error[]): DeletedFileItem[] {\r\n const result: DeletedFileItem[] = [];\r\n if (source == null) return result;\r\n source.forEach(item => {\r\n if (item.Key) {\r\n result.push({\r\n key: item.Key.replace(directoryName, \"\"),\r\n directoryName,\r\n code: item.Code ?? \"\",\r\n message: item.Message ?? \"\",\r\n versionId: item.VersionId ?? \"\"\r\n });\r\n };\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 結果情報を結合します。\r\n * @param target 結合先情報を指定します。\r\n * @param source 結合する情報を指定します。\r\n */\r\n public static margeResult(target: S3DeleteResult, source: S3DeleteResult): S3DeleteResult {\r\n return {\r\n isError: target.isError || source.isError,\r\n errorMessage: source.errorMessage,\r\n successItems: FileManageUtility.margeResultItems(target.successItems, source.successItems),\r\n errorItems: FileManageUtility.margeResultItems(target.errorItems, source.errorItems),\r\n };\r\n }\r\n\r\n /**\r\n * 結果情報を結合します。\r\n * @param target 結合先情報を指定します。\r\n * @param source 結合する情報を指定します。\r\n */\r\n private static margeResultItems(target: DeletedFileItem[], source: DeletedFileItem[]): DeletedFileItem[] {\r\n return Array.from(new Map([...target, ...source].map((item) => [item.key, item])).values())\r\n .sort((a, b) => { return a.key.toLowerCase() > b.key.toLowerCase() ? 1 : -1 });\r\n }\r\n\r\n /**\r\n * オンラインヘルプルートフォルダかどうか判定します。\r\n * @param prefix ディレクトリ名を指定します。\r\n * @returns オンラインヘルプルートフォルダの場合は、true を、それ以外の場合は false を返します。\r\n */\r\n private static isOnelineHelpRoot(prefix: string): boolean {\r\n return (FileManageUtility.removeTrailingSlash(prefix) === path.join(FileManageUtility.rootDirectory, HomeDirectoryType.OnlineHelp))\r\n }\r\n\r\n /**\r\n * オンラインヘルプフォルダをソートします。\r\n * @param source ソート元の情報を指定します。\r\n * @returns ソート結果を返します。\r\n */\r\n private static SortingListFiles(source: S3FileListItem[]): S3FileListItem[] {\r\n const result = FileManageUtility.onlineHelpList\r\n .map((value) => source.find(item => FileManageUtility.removeTrailingSlash(item.name) === value))\r\n .filter((item): item is Exclude => Boolean(item));\r\n return result;\r\n}\r\n}\r\n","// S3\r\nimport { S3Client, ListObjectsCommand, GetObjectCommand, PutObjectCommand, DeleteObjectCommand, DeleteObjectsCommand, DeleteObjectsCommandOutput, ObjectIdentifier, DeleteObjectCommandOutput } from \"@aws-sdk/client-s3\";\r\nimport { CognitoIdentityClient } from \"@aws-sdk/client-cognito-identity\";\r\nimport { fromCognitoIdentityPool } from \"@aws-sdk/credential-provider-cognito-identity\";\r\nimport { FileManageUtility } from \"./file-manage-utility\";\r\nimport { S3GetRequest, S3ErrorOutput, S3DeleteResult, S3GetListFilesResult, S3GetFileResult, S3PutResult, S3PutRequest, S3DeleteRequest } from \"./types\";\r\nimport { FileInfo, PutedFileItem } from \"../../../pages/FileManager/FileManage/_types\";\r\nimport path from 'path';\r\n\r\n/** コマンド種別 */\r\ntype SendCommandType = ListObjectsCommand | GetObjectCommand | PutObjectCommand | DeleteObjectCommand;\r\n\r\n/**\r\n * `ファイル管理` 関連の `Amazon S3` と 通信する機能を提供します。\r\n */\r\nexport class FileManageAdapter {\r\n\r\n //#region フィールド\r\n\r\n /** Amazon S3 クライアントを表します。 */\r\n private _client: S3Client;\r\n\r\n /** リージョン を表します。*/\r\n private readonly REGION = \"ap-northeast-1\";\r\n\r\n /** バケット名 を表します。*/\r\n private readonly IDENTITY_POOL_ID = \"ap-northeast-1:3c4dbdd4-61cd-4ace-bd11-1a9f0226deb4\";\r\n\r\n ///** AWS Cognito の IDプール を表します。*/\r\n private readonly BUCKET_NAME = \"fudotetra\";\r\n\r\n //private readonly BUCKET_NAME = \"uedev\";\r\n // private readonly IDENTITY_POOL_ID = \"ap-northeast-1:452a5086-357d-49e6-9652-7a78fd7eed1b\";\r\n\r\n /** 唯一のインスタンスを表します。 */\r\n public static readonly instance = new FileManageAdapter();\r\n \r\n //#endregion フィールド\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * パラメーター内容を検証します。\r\n * @param parameter\r\n * @throws {string} エラーメッセージをスローします。\r\n */\r\n private validateS3GetRequest(parameter: S3GetRequest): void {\r\n if (!parameter.key) throw new Error(\"key が指定されていません。\");\r\n return;\r\n }\r\n\r\n /**\r\n * エラーを表す結果情報を作成します。\r\n *\r\n * @param message エラーメッセージを指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createErrorResult(message?: string): S3ErrorOutput {\r\n return {\r\n isError: true,\r\n errorMessage: message,\r\n };\r\n }\r\n\r\n /**\r\n * 結果情報を作成します。\r\n * @param output 項目一覧を指定します。\r\n * @returns 結果情報を返します。\r\n */\r\n private createDeleteResult(output: DeleteObjectsCommandOutput, directoryName: string): S3DeleteResult {\r\n const isResultError = (output.Errors?.length ?? 0) > 0;\r\n let result: S3DeleteResult = {\r\n isError: isResultError,\r\n errorMessage: isResultError ? \"削除に失敗した項目があります。\" : \"\",\r\n successItems: FileManageUtility.toSuccessFileItem(directoryName, output.Deleted),\r\n errorItems: FileManageUtility.toErrorFileItem(directoryName, output.Errors),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ファイルリストを取得します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n public async getListFilesAsync(parameter: S3GetRequest): Promise {\r\n // チェック\r\n this.validateS3GetRequest(parameter);\r\n // コマンド生成\r\n const command = new ListObjectsCommand({\r\n Bucket: this.BUCKET_NAME,\r\n Prefix: FileManageUtility.addTrailingSlash((parameter.key)),\r\n Delimiter: \"/\",\r\n });\r\n\r\n // 通信処理\r\n let result: S3GetListFilesResult;\r\n try {\r\n const res = await this._client.send(command);\r\n\r\n // success\r\n result = {\r\n items: FileManageUtility.toListItem(res),\r\n isError: false,\r\n };\r\n } catch (error) {\r\n console.error(\"getListFilesAsync\", error);\r\n // error\r\n result = {\r\n items: [],\r\n ...this.createErrorResult(error.message)\r\n };\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ファイルオブジェクトを取得します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n public async getFileAsync(parameter: S3GetRequest): Promise {\r\n // チェック\r\n this.validateS3GetRequest(parameter);\r\n // コマンド生成\r\n const command = new GetObjectCommand({\r\n Bucket: this.BUCKET_NAME,\r\n Key: parameter.key,\r\n });\r\n\r\n // 通信処理\r\n let result: S3GetFileResult;\r\n try {\r\n const res = await this._client.send(command);\r\n if (res.Body == null) throw new Error(\"ファイル情報がありません。\");\r\n // success\r\n result = {\r\n file: await FileManageUtility.asBlob(res),\r\n isError: false,\r\n };\r\n\r\n } catch (error) {\r\n console.error(\"getFileAsync\", error);\r\n // error\r\n result = { \r\n ...this.createErrorResult(error.message)\r\n };\r\n };\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * コマンドを送信します。\r\n * @param command 送信コマンドを指定します。\r\n */\r\n private async sendPutObjectAsync(command: PutObjectCommand): Promise {\r\n // 通信処理\r\n let result: S3PutResult;\r\n try {\r\n const res = await this._client.send(command);\r\n // success\r\n result = {\r\n isError: false,\r\n };\r\n } catch (error) {\r\n // error\r\n result = this.createErrorResult(error.message);\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ファイルオブジェクトを送信します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n private async putFileAsync(parameter: FileInfo): Promise {\r\n let result: PutedFileItem;\r\n try {\r\n // チェック\r\n const errorItem = !parameter.key ? \"キー\"\r\n : !parameter.file ? \"ファイル情報\"\r\n : \"\";\r\n if (errorItem !== \"\") {\r\n // 上位側にエラーはスローせず、結果として返す。\r\n throw new Error(`${errorItem} が指定されていません`);\r\n }\r\n\r\n // コマンド生成\r\n const command = new PutObjectCommand({\r\n Bucket: this.BUCKET_NAME,\r\n Key: parameter.key,\r\n Body: parameter.file,\r\n ContentType: parameter.file?.type,\r\n });\r\n\r\n // 通信処理\r\n const res = await this._client.send(command);\r\n // success\r\n result = {\r\n key: parameter.file?.name ?? parameter.key,\r\n isError: false,\r\n };\r\n } catch (error) {\r\n // error\r\n result =\r\n {\r\n key: parameter.file?.name ?? parameter.key,\r\n isError: true,\r\n message: error.message ?? \"通信に失敗しました。\",\r\n };\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * ファイルオブジェクトを送信します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n public async putFilesAsync(parameter: S3PutRequest): Promise {\r\n\r\n // 1ファイルずつ処理\r\n const results = await Promise.all(parameter.files.map((fileInfo) => this.putFileAsync(fileInfo)));\r\n\r\n // 結果\r\n const successItems: PutedFileItem[] = [];\r\n const errorItems: PutedFileItem[] = [];\r\n results.forEach(r => {\r\n if (r.isError) {\r\n errorItems.push(r);\r\n } else {\r\n successItems.push(r);\r\n };\r\n });\r\n const result: S3PutResult = {\r\n isError: false,\r\n successItems: successItems.slice(),\r\n errorItems: errorItems.slice(),\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * ディレクトリを作成します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n public async putDirectoryAsync(parameter: S3PutRequest): Promise {\r\n // 複数情報を処理することも出来るが、ここでは1つのみとする。\r\n if (parameter.files.length < 1) throw new Error(\"parameter が不正です。\");\r\n const dirInfo = parameter.files[0];\r\n\r\n // チェック\r\n if (!dirInfo.key) throw new Error(\"key が指定されていません。\")\r\n\r\n // コマンド生成\r\n const command = new PutObjectCommand({\r\n Bucket: this.BUCKET_NAME,\r\n Key: FileManageUtility.addTrailingSlash(dirInfo.key),\r\n });\r\n\r\n // 通信処理\r\n return await this.sendPutObjectAsync(command);\r\n }\r\n\r\n /**\r\n * ファイルオブジェクトを削除します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n public async deleteObjectsAsync(parameter: S3DeleteRequest): Promise {\r\n // チェック\r\n if (!parameter.keys?.length) throw Error(\"keys が指定されていません。\")\r\n\r\n const deletePromises: Promise[] = [];\r\n parameter.keys.forEach(key =>\r\n deletePromises.push(\r\n this.deleteFoldersAsync(\r\n key,\r\n { isError: false, successItems: [], errorItems: [] },\r\n parameter.directoryName,\r\n )\r\n )\r\n );\r\n\r\n let result: S3DeleteResult = {\r\n isError: false,\r\n successItems: [],\r\n errorItems: [],\r\n };\r\n\r\n const r = await Promise.all(deletePromises);\r\n r.forEach(res => {\r\n result = FileManageUtility.margeResult(result, res)\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * \r\n * @param key\r\n */\r\n private async deleteFoldersAsync(key: string, result: S3DeleteResult, directoryName: string): Promise {\r\n\r\n // フォルダ配下のファイルを全取得する\r\n const getRes = await this.getListFilesAsync({ key });\r\n if (getRes.isError) {\r\n const msg = getRes.errorMessage ?? `${key}のファイル情報取得に失敗しました。`\r\n const getListError: S3DeleteResult = {\r\n isError: true,\r\n errorMessage: msg,\r\n successItems: [],\r\n errorItems: [{\r\n key: key.replace(directoryName, \"\"),\r\n directoryName,\r\n message: msg,\r\n }],\r\n } \r\n return FileManageUtility.margeResult(result, getListError); \r\n }\r\n\r\n // 配下にオブジェクトが無ければ、指定フォルダ削除可能\r\n if (!getRes.items.length) {\r\n // 指定したフォルダを削除する。\r\n const res = await this.deleteFilesAsync({ keys: [key], directoryName });\r\n return FileManageUtility.margeResult(result, res);\r\n };\r\n\r\n // フォルダとファイルを分けて、再リクエスト\r\n const files: string[] = [];\r\n const folders: string[] = [];\r\n getRes.items.forEach(item => {\r\n if (item.key.endsWith(\"/\")) {\r\n folders.push(item.key);\r\n } else {\r\n files.push(item.key);\r\n }\r\n });\r\n\r\n if (folders.length > 0) {\r\n // サブフォルダの削除を行う\r\n const deletePromises: Promise[] = [];\r\n folders.forEach((folder) => deletePromises.push(this.deleteFoldersAsync(folder, result, directoryName)));\r\n\r\n const responses = await Promise.all(deletePromises);\r\n responses.forEach(res => {\r\n result = FileManageUtility.margeResult(result, res);\r\n })\r\n\r\n } else if (files.length > 0) {\r\n // 配下のファイル\r\n const deleteFilesRes = await this.deleteFilesAsync({ keys: files, directoryName });\r\n result = FileManageUtility.margeResult(result, deleteFilesRes);\r\n }\r\n\r\n // エラー時\r\n if (result.isError || result.errorItems.length > 0) return result;\r\n\r\n // 再帰的に呼び出し\r\n const res = await this.deleteFoldersAsync(key, result, directoryName);\r\n return FileManageUtility.margeResult(result, res);\r\n }\r\n\r\n /**\r\n * ファイルオブジェクトを削除します。\r\n * @param parameter パラメーターを指定します。\r\n */\r\n public async deleteFilesAsync(parameter: S3DeleteRequest): Promise {\r\n // チェック\r\n if (!parameter.keys?.length) throw Error(\"keys が指定されていません。\")\r\n\r\n // コマンド生成\r\n const objects: ObjectIdentifier[] = [];\r\n\r\n parameter.keys.forEach(key => objects.push({ Key: key }));\r\n const command = new DeleteObjectsCommand({\r\n Bucket: this.BUCKET_NAME,\r\n Delete: {\r\n Objects: objects.slice(),\r\n }\r\n });\r\n\r\n // 通信処理\r\n let result: S3DeleteResult;\r\n try {\r\n const res = await this._client.send(command);\r\n // success\r\n result = this.createDeleteResult(res, parameter.directoryName);\r\n } catch (error) {\r\n console.error(\"deleteFilesAsync\", error);\r\n // error\r\n result = {\r\n successItems: [],\r\n errorItems: [],\r\n ...this.createErrorResult(error.message),\r\n };\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * コンストラクター\r\n *\r\n * @constructor\r\n */\r\n private constructor() {\r\n\r\n /** S3 クライアント */\r\n this._client = new S3Client({\r\n region: this.REGION,\r\n credentials: fromCognitoIdentityPool({\r\n client: new CognitoIdentityClient({ region: this.REGION }),\r\n identityPoolId: this.IDENTITY_POOL_ID,\r\n }),\r\n })\r\n\r\n // 変更不可\r\n Object.seal(this);\r\n }\r\n\r\n //#endregion メソッド\r\n}\r\n","// redux\r\nimport { Dispatch } from 'redux';\r\nimport { PayloadAction } from '@reduxjs/toolkit';\r\n// shared\r\nimport { ExtendGenericState, createExtendGenericSlice } from '../shared/create-extend-generic-slice';\r\nimport { S3GetListFilesResult, S3GetFileResult, S3PutResult, S3DeleteResult, S3GetRequest, S3PutRequest, S3DeleteRequest } from '../../adapter/file-manage/types';\r\nimport { FileManageAdapter } from '../../adapter/file-manage/file-manage-adapter';\r\nimport { HomeDirectoryType, S3FileListItem, DirectoryItem } from '../../../pages/FileManager/FileManage/_types';\r\nimport { SharedAdapter } from '../../adapter/shared/shared-adapter';\r\nimport { FileManageUtility } from '../../adapter/file-manage/file-manage-utility';\r\n\r\n/** ファイル管理 アイテム情報の State を表します。 */\r\ninterface FileManageItemState {\r\n /** ディレクトリ情報を表します。 */\r\n directoryItem: DirectoryItem,\r\n /** 選択項目を表します。 */\r\n selectedRowItems: S3FileListItem[]\r\n /** アップロードダイアログの開閉状態を表します。 */\r\n isOpenUploadDialog: boolean,\r\n /** フォルダ作成ダイアログの開閉状態を表します。 */\r\n isOpenCreateFolderDialog: boolean,\r\n /** 削除ダイアログの開閉状態を表します。 */\r\n isOpenDeleteDialog: boolean,\r\n /** アップロード 結果ダイアログの開閉状態を表します。 */\r\n isOpenUploadResultDialog: boolean,\r\n /** 削除 結果ダイアログの開閉状態を表します。 */\r\n isOpenDeleteResultDialog: boolean,\r\n\r\n isUpdated: boolean;\r\n}\r\n\r\n/** ファイル管理 State を提供します。 */\r\ninterface FileManageSliceState {\r\n /** 一覧取得結果情報を表します。 */\r\n getFileListResult?: S3GetListFilesResult,\r\n /** ファイル取得結果情報を表します。 */\r\n getFileResult?: S3GetFileResult,\r\n /** 送信結果情報*/\r\n putResult?: S3PutResult,\r\n /** 削除送信結果情報*/\r\n deleteResult?: S3DeleteResult,\r\n}\r\n\r\n/** State の初期値を設定します。 */\r\nconst initialState: ExtendGenericState = {\r\n isLoading: false,\r\n isShowMessage: false,\r\n result: {},\r\n item: {\r\n directoryItem: { root: FileManageUtility.rootDirectory, home: HomeDirectoryType.Document, sub: [] },\r\n selectedRowItems: [],\r\n isOpenUploadDialog: false,\r\n isOpenCreateFolderDialog: false,\r\n isOpenDeleteDialog: false,\r\n isOpenDeleteResultDialog: false,\r\n isOpenUploadResultDialog: false,\r\n isUpdated : true,\r\n }\r\n}\r\n\r\n/** ファイル管理 Slice を 提供します。*/\r\nexport const FileManageSlice = createExtendGenericSlice({\r\n // State Reducer Action を生成\r\n name: 'FileManage',\r\n initialState: initialState,\r\n reducers: {\r\n /**\r\n * 通信終了時の処理を行います。\r\n * @param state\r\n * @param action\r\n */\r\n fetchEndExtension(state: ExtendGenericState, action: PayloadAction) {\r\n state.isLoading = false;\r\n\r\n if (action.payload.getFileListResult) {\r\n state.result.getFileListResult = action.payload.getFileListResult;\r\n }\r\n if (action.payload.getFileResult) {\r\n state.result.getFileResult = action.payload.getFileResult;\r\n }\r\n if (action.payload.putResult) {\r\n state.result.putResult = action.payload.putResult;\r\n }\r\n if (action.payload.deleteResult) {\r\n state.result.deleteResult = action.payload.deleteResult;\r\n }\r\n },\r\n\r\n /**\r\n * カレントディレクトリを変更します。\r\n * @param state\r\n * @param action\r\n */\r\n selectedRows(state, action: PayloadAction) {\r\n state.item.selectedRowItems = action.payload.map(value => {\r\n const newValue: S3FileListItem = {\r\n key: value.key,\r\n name: value.name,\r\n type: value.type,\r\n size: value.size,\r\n lastModified: value.lastModified,\r\n }\r\n return newValue;\r\n });\r\n },\r\n\r\n /**\r\n * ダイアログの開閉状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n toggleUploadDialog(state, action: PayloadAction) {\r\n state.item.isOpenUploadDialog = action.payload;\r\n },\r\n\r\n /**\r\n * ダイアログの開閉状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n toggleUploadResultDialog(state, action: PayloadAction) {\r\n state.item.isOpenUploadResultDialog = action.payload;\r\n },\r\n\r\n /**\r\n * ダイアログの開閉状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n toggleCreateFolderDialog(state, action: PayloadAction) {\r\n state.item.isOpenCreateFolderDialog = action.payload;\r\n },\r\n\r\n /**\r\n * ダイアログの開閉状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n toggleDeleteDialog(state, action: PayloadAction) {\r\n state.item.isOpenDeleteDialog = action.payload;\r\n },\r\n\r\n /**\r\n * ダイアログの開閉状態を変更します。\r\n * @param state\r\n * @param action\r\n */\r\n toggleDeleteResultDialog(state, action: PayloadAction) {\r\n state.item.isOpenDeleteResultDialog = action.payload;\r\n },\r\n\r\n }\r\n});\r\n\r\n/**\r\n * 一覧取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetListFilesAsync = (parameter: S3GetRequest) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(FileManageSlice.actions.fetchStart());\r\n dispatch(FileManageSlice.actions.updateItemPartial({ selectedRowItems:[] }));\r\n\r\n const dirItem = FileManageUtility.toDirItem(parameter.key);\r\n if (dirItem == null) {\r\n dispatch(FileManageSlice.actions.showErrorMessage(`一覧取得時のキーが不正です key:${parameter.key}`));\r\n return;\r\n };\r\n\r\n // 通信処理\r\n const result = await FileManageAdapter.instance.getListFilesAsync(parameter);\r\n\r\n dispatch(FileManageSlice.actions.fetchEndExtension({ getFileListResult: result }));\r\n dispatch(FileManageSlice.actions.updateItemPartial({ directoryItem : dirItem }));\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(FileManageSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n dispatch(FileManageSlice.actions.showSuccessMessage());\r\n }\r\n } catch (error) {\r\n // 例外\r\n dispatch(FileManageSlice.actions.fetchEndExtension({\r\n getFileListResult: {\r\n items: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n },\r\n }));\r\n dispatch(FileManageSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(FileManageSlice.actions.fetchEnd());\r\n dispatch(FileManageSlice.actions.updateItemPartial({ isUpdated : false }));\r\n }\r\n}\r\n\r\n/**\r\n * ファイル取得処理を行います。\r\n * @param parameter\r\n */\r\nexport const onGetFileAsync = (parameter: S3GetRequest) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(FileManageSlice.actions.fetchStart());\r\n // 通信処理\r\n const result = await FileManageAdapter.instance.getFileAsync(parameter);\r\n\r\n dispatch(FileManageSlice.actions.fetchEndExtension({ getFileResult: result }));\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(FileManageSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n dispatch(FileManageSlice.actions.showSuccessMessage());\r\n }\r\n } catch (error) {\r\n // 例外\r\n dispatch(FileManageSlice.actions.fetchEndExtension({\r\n getFileResult: {\r\n isError: true,\r\n errorMessage: `${error}`,\r\n },\r\n }));\r\n dispatch(FileManageSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(FileManageSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * フォルダ作成処理を行います。\r\n * @param parameter\r\n */\r\nexport const onPutDirectoryAsync = (parameter: S3PutRequest) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(FileManageSlice.actions.fetchStart());\r\n // 通信処理\r\n const result = await FileManageAdapter.instance.putDirectoryAsync(parameter);\r\n\r\n dispatch(FileManageSlice.actions.fetchEndExtension({ putResult: result }));\r\n\r\n if (result.isError) {\r\n // 異常\r\n dispatch(FileManageSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n } else {\r\n // 正常\r\n dispatch(FileManageSlice.actions.showSuccessMessage());\r\n // ダイアログを閉じる\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isUpdated: true,\r\n isOpenCreateFolderDialog: false\r\n }));\r\n\r\n }\r\n } catch (error) {\r\n // 例外\r\n dispatch(FileManageSlice.actions.fetchEndExtension({\r\n putResult: {\r\n isError: true,\r\n errorMessage: `${error}`,\r\n },\r\n }));\r\n dispatch(FileManageSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(FileManageSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * ファイルアップロード処理を行います。\r\n * @param parameter\r\n */\r\nexport const onPutFilesAsync = (parameter: S3PutRequest) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(FileManageSlice.actions.fetchStart());\r\n // 通信処理\r\n const result = await FileManageAdapter.instance.putFilesAsync(parameter);\r\n\r\n dispatch(FileManageSlice.actions.fetchEndExtension({ putResult: result }));\r\n\r\n // if (result.isError) {\r\n // // 異常\r\n // dispatch(FileManageSlice.actions.showErrorMessage(result.errorMessage ?? \"\"));\r\n // } else {\r\n // // 正常\r\n // dispatch(FileManageSlice.actions.showSuccessMessage());\r\n // }\r\n\r\n // ダイアログ\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isOpenUploadDialog: false,\r\n isOpenUploadResultDialog: true,\r\n }));\r\n\r\n } catch (error) {\r\n // 例外\r\n dispatch(FileManageSlice.actions.fetchEndExtension({\r\n putResult: {\r\n isError: true,\r\n errorMessage: `${error}`,\r\n },\r\n }));\r\n dispatch(FileManageSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(FileManageSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n/**\r\n * 削除処理を行います。\r\n * @param parameter\r\n */\r\nexport const onDeleteFilesAsync = (parameter: S3DeleteRequest, password: string) => async (dispatch: Dispatch) => {\r\n try {\r\n // 処理中 ON\r\n dispatch(FileManageSlice.actions.fetchStart());\r\n\r\n // パスワード認証\r\n const checkPasswordResult = await SharedAdapter.instance.checkPasswordAsync({ item: { password: password } });\r\n\r\n // 異常確認\r\n if (checkPasswordResult.isError) {\r\n // 異常メッセージ\r\n dispatch(FileManageSlice.actions.showErrorMessage(checkPasswordResult.errorMessage));\r\n } else {\r\n // 削除実行\r\n const result = await FileManageAdapter.instance.deleteObjectsAsync(parameter);\r\n\r\n dispatch(FileManageSlice.actions.fetchEndExtension({ deleteResult: result }));\r\n\r\n // ダイアログ\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isOpenDeleteDialog: false,\r\n isOpenDeleteResultDialog: true,\r\n }));\r\n }\r\n\r\n } catch (error) {\r\n // 例外\r\n dispatch(FileManageSlice.actions.fetchEndExtension({\r\n deleteResult: {\r\n successItems: [],\r\n errorItems: [],\r\n isError: true,\r\n errorMessage: `${error}`,\r\n },\r\n }));\r\n dispatch(FileManageSlice.actions.showErrorMessage(`${error}`));\r\n\r\n } finally {\r\n // 処理中 OFF\r\n dispatch(FileManageSlice.actions.fetchEnd());\r\n }\r\n}\r\n\r\n\r\n\r\n","import * as React from 'react';\r\nimport MuiColorButton from '../../../../../components/Buttons/ColorButton/MuiColorButton';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport { Sync, CloudUpload, CreateNewFolder, Delete } from '@material-ui/icons';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n '& > *': {\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 0,\r\n },\r\n }),\r\n);\r\n\r\n/** ボタン種別を提供します。*/\r\nexport type ButtonType = \"update\" | \"upload\" | \"create\" | \"delete\";\r\n\r\n/** 操作ボタン の Props を提供します。*/\r\ninterface ControlButtonsProps {\r\n /** ボタンクリック処理を表します。 */\r\n onClick: (type: ButtonType) => void;\r\n /** アップロードボタンの可否を表します。 */\r\n isDisabledUpload: boolean;\r\n /** フォルダ作成ボタンの可否を表します。 */\r\n isDisabledCreate: boolean;\r\n /** 削除ボタンの可否を表します。 */\r\n isDisabledDelete: boolean;\r\n}\r\n\r\n\r\n/**\r\n * 操作ボタンコンポーネントを表示します。\r\n * @param props\r\n */\r\nexport function ControlButtons(props: ControlButtonsProps): JSX.Element {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n props.onClick(\"update\")}\r\n >\r\n \r\n \r\n\r\n\r\n }\r\n onClick={() => props.onClick(\"upload\")}\r\n disabled={props.isDisabledUpload}\r\n >\r\n アップロード\r\n \r\n\r\n }\r\n onClick={() => props.onClick(\"create\")}\r\n disabled={props.isDisabledCreate}\r\n >\r\n フォルダ作成\r\n \r\n\r\n }\r\n onClick={() => props.onClick(\"delete\")}\r\n disabled={props.isDisabledDelete}\r\n >\r\n 削除\r\n \r\n
\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { ControlButtons, ButtonType } from './ControlButtons';\r\nimport { FileManageSlice } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport { HomeDirectoryType } from '../../_types';\r\n\r\n/**\r\n * 操作ボタンコンポーネントを表示します。\r\n * @param props\r\n */\r\nexport function ControlButtonsContainer(): JSX.Element {\r\n\r\n const dispatch = useDispatch();\r\n const directoryItem = useSelector((state: RootState) => state.fileManage.item.directoryItem);\r\n const selectedItem = useSelector((state: RootState) => state.fileManage.item.selectedRowItems);\r\n\r\n /** ボタンのクリックイベントを処理します。 */\r\n const onClick = (type: ButtonType ) => {\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isUpdated: type === \"update\" ? true : void 0,\r\n isOpenUploadDialog: type === \"upload\" ? true : void 0,\r\n isOpenCreateFolderDialog: type === \"create\" ? true : void 0,\r\n isOpenDeleteDialog: type === \"delete\" ? true : void 0,\r\n }));\r\n };\r\n\r\n return (\r\n 0)}\r\n isDisabledUpload={(directoryItem.home === HomeDirectoryType.OnlineHelp && directoryItem.sub.length < 1)}\r\n onClick={onClick}\r\n />\r\n );\r\n}\r\n","//react\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n// material-ui\r\nimport {\r\n Dialog,\r\n DialogActions,\r\n DialogTitle,\r\n DialogContent,\r\n Typography,\r\n TextField,\r\n Box,\r\n} from '@material-ui/core';\r\nimport { createStyles, makeStyles, Theme} from '@material-ui/core/styles';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport MuiCreateButton from '../../../../../components/Buttons/MuiCreateButton';\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiColorButton from '../../../../../components/Buttons/ColorButton/MuiColorButton';\r\nimport { CreateNewFolder } from '@material-ui/icons';\r\n\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // タイトル\r\n title: {\r\n alignItems: 'center',\r\n display: 'inline-flex',\r\n // アイコン\r\n \"& .MuiSvgIcon-root\": {\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n // サブタイトル\r\n subtitle: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // 名称\r\n name: {\r\n fontSize: \"1.25rem\",\r\n marginRight: theme.spacing(1),\r\n },\r\n // 入力項目\r\n inputItem: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n // ボタン\r\n button: {\r\n minWidth: 120,\r\n },\r\n // ダイアログコンテンツ(ダイアログ内のTextfiledのlabelが全角4文字以上でスクロールが発生するで、無効にする)\r\n dialogContent: {\r\n overflowY: \"visible\"\r\n }\r\n }),\r\n);\r\n\r\n/** 入力項目を表します。 */\r\nexport interface CreateFolderDialogInputItem {\r\n /** フォルダ名を表します */\r\n name: string,\r\n}\r\n\r\n/** ダイアログの入力項目のバリデーション情報を表します。 */\r\ninterface ValidateInputItem {\r\n /** フォルダ名を表します。 */\r\n readonly name: string;\r\n}\r\n\r\n/** フォームダイアログの Props を表示します。 */\r\ninterface FormDialogProps {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** OKボタンクリック時の処理を表します。 */\r\n onCreateClick: (event: React.MouseEvent, input: CreateFolderDialogInputItem) => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n}\r\n\r\n/**\r\n * フォームダイアログを表示します。\r\n * @param props\r\n */\r\nexport function CreateFolderDialog(props: FormDialogProps): JSX.Element {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /** State */\r\n const [open, setOpen] = useState(false)\r\n\r\n useEffect(() => {\r\n setOpen(props.isOpen)\r\n }, [props.isOpen])\r\n\r\n /** 入力内容 */\r\n const [inputItem, setInputItem] = useState({ name: \"\" });\r\n\r\n /** バリデーション情報を表します。 */\r\n const [validate, setValidate] = useState({ name: \"\" });\r\n\r\n /**\r\n * 入力項目 内容変更時のイベント処理を行います。\r\n * */\r\n const onChange = (name: keyof CreateFolderDialogInputItem) => (event: React.ChangeEvent) => {\r\n const value = event.target.value;\r\n // 入力項目更新\r\n setInputItem({ ...inputItem, [name]: value });\r\n };\r\n\r\n /** ダイアログを閉じるときの処理を行います。 */\r\n const onClose = () => {\r\n setInputItem({ name: \"\" });\r\n setValidate({ name: \"\" });\r\n props.handleClose();\r\n };\r\n\r\n /**\r\n * OKボタンのクリック処理を行います。\r\n * @param event\r\n */\r\n const onOkClick = (event: React.MouseEvent) => {\r\n // バリデーション\r\n const isError = onValidateInputItem()\r\n if (isError === false) {\r\n setInputItem({ name: \"\" });\r\n setValidate({ name: \"\" });\r\n props.onCreateClick(event, inputItem);\r\n };\r\n };\r\n\r\n /**\r\n * フォルダ名を検証します。\r\n * @param name\r\n */\r\n const checkNameFormat = (name: string) => {\r\n const pattern = /[\\\\\\/:\\*\\?\\\"<>\\|]/;\r\n return pattern.test(name);\r\n };\r\n\r\n\r\n /** 入力内容のバリデーションを行います。 */\r\n const onValidateInputItem = (): boolean => {\r\n let result = false;\r\n let nameError = \"\";\r\n\r\n if (!inputItem.name) {\r\n nameError = \"フォルダ名を入力してください\";\r\n result = true;\r\n } else if (checkNameFormat(inputItem.name)) {\r\n nameError = '\\/:*?\"<>| はフォルダ名に使用することが出来ません';\r\n result = true;\r\n };\r\n\r\n // エラー文字をセット\r\n setValidate({ name: nameError });\r\n return result;\r\n };\r\n\r\n /**\r\n * form 送信イベント処理を行います\r\n * @param e\r\n */\r\n const submitHandler = (e: React.FormEvent) => {\r\n // Enter key による submit を無効にする\r\n e.preventDefault();\r\n }\r\n\r\n return (\r\n \r\n\r\n {/* タイトル */}\r\n \r\n \r\n フォルダ作成\r\n \r\n \r\n\r\n\r\n \r\n {/* message */}\r\n \r\n 新しいフォルダを作成します。\r\n \r\n \r\n フォルダ名を入力してください。\r\n \r\n\r\n
submitHandler(e)}>\r\n {/* フォルダ名 */}\r\n \r\n\r\n \r\n\r\n
\r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n }\r\n className={classes.button}\r\n onClick={(event) => onOkClick(event)}\r\n >\r\n フォルダ作成\r\n \r\n \r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { FileManageSlice, onPutDirectoryAsync } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport { CreateFolderDialog, CreateFolderDialogInputItem } from './CreateFolderDialog';\r\nimport path from 'path';\r\nimport { FileManageUtility } from '../../../../../modules/adapter/file-manage/file-manage-utility';\r\n\r\n/**\r\n * フォルダ作成ダイアログを表示します。\r\n * @param props\r\n */\r\nexport function CreateFolderDialogContainer(): JSX.Element {\r\n const dispatch = useDispatch();\r\n // redux store\r\n const isOpen = useSelector((state: RootState) => state.fileManage.item.isOpenCreateFolderDialog ?? false);\r\n const directoryName = useSelector((state: RootState) => FileManageUtility.toDirectoryKey(state.fileManage.item.directoryItem));\r\n\r\n /**\r\n * 作成ボタンのクリック処理を行います。\r\n * @param e\r\n * @param input\r\n */\r\n const onCreateClick = async (e: React.MouseEvent, input: CreateFolderDialogInputItem) => {\r\n // 非同期通信\r\n const key = path.join(directoryName, input.name);\r\n await dispatch(onPutDirectoryAsync({ files: [{ key }] }));\r\n };\r\n\r\n /** ダイアログを非表示にします。 */\r\n const closeDialog = () => {\r\n dispatch(FileManageSlice.actions.updateItemPartial({ isOpenCreateFolderDialog: false }));\r\n };\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\n","//react\r\nimport * as React from 'react';\r\n// material-ui\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport {Paper,Typography,} from '@material-ui/core';\r\nimport {\r\n ToggleButton,\r\n ToggleButtonGroup,\r\n} from '@material-ui/lab';\r\n//type\r\nimport { HomeDirectoryType } from '../../_types';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n paper: {\r\n display: 'flex',\r\n border: `1px solid ${theme.palette.divider}`,\r\n flexWrap: 'wrap',\r\n justifyContent: \"center\",\r\n },\r\n root: {\r\n \"&.Mui-selected\": {\r\n color: theme.palette.primary.contrastText,\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n \"&.Mui-selected:hover\": {\r\n backgroundColor: theme.palette.primary.main,\r\n }\r\n },\r\n grouped: {\r\n margin: theme.spacing(0.5),\r\n border: 'none',\r\n '&:not(:first-child)': {\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n '&:first-child': {\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n },\r\n }),\r\n);\r\n\r\n/** ホームフォルダ選択のトグルボタングループ の Props を提供します */\r\ninterface Props {\r\n /** ホームフォルダを表します。*/\r\n type: HomeDirectoryType,\r\n /** 選択時のイベント処理を表します */\r\n onChange: (event: React.MouseEvent, selectedType: HomeDirectoryType | null) => void,\r\n}\r\n\r\n/**\r\n * トグルボタングループを表示します。\r\n * */\r\nexport function HomeDirTypeToggle(props: Props): JSX.Element {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n props.onChange(event, value)}\r\n aria-label=\"home-directory-type\"\r\n >\r\n \r\n \r\n ドキュメント\r\n \r\n \r\n \r\n \r\n オンラインヘルプ\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","//react\r\nimport * as React from 'react';\r\nimport { HomeDirectoryType } from '../../_types';\r\nimport { HomeDirTypeToggle } from './HomeTypeToggle';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { FileManageSlice } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\n\r\n/**\r\n * ディレクトリタイプ トグルボタンを表示します。\r\n * */\r\nexport function HomeDirTypeToggleContainer(): JSX.Element {\r\n const dispatch = useDispatch();\r\n\r\n const homeType: HomeDirectoryType = useSelector((state: RootState) => state.fileManage.item.directoryItem.home);\r\n const root: string = useSelector((state: RootState) => state.fileManage.item.directoryItem.root);\r\n\r\n /**\r\n * 選択変更イベントを処理します。\r\n * @param event\r\n * @param selected\r\n */\r\n const onChangeType = (event: React.MouseEvent, selected: HomeDirectoryType | null) => {\r\n if (selected !== null) {\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isUpdated: true,\r\n directoryItem: {\r\n root: root,\r\n home: selected,\r\n sub: []\r\n },\r\n }));\r\n };\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\n// redux\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { FileManageSlice, onDeleteFilesAsync } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport ConfirmDialog from '../../../../Master/Shared/components/ConfirmDialog/ConfirmDialog';\r\nimport { FileManageUtility } from '../../../../../modules/adapter/file-manage/file-manage-utility';\r\n\r\n\r\n/** 削除ダイアログを表示します。 */\r\nexport function DeleteDialogContainer(): JSX.Element {\r\n\r\n const dispatch = useDispatch();\r\n\r\n const isOpen = useSelector((state: RootState) => state.fileManage.item.isOpenDeleteDialog);\r\n const selectedItems = useSelector((state: RootState) => state.fileManage.item.selectedRowItems);\r\n const directoryName = useSelector((state: RootState) => FileManageUtility.toDirectoryKey(state.fileManage.item.directoryItem));\r\n\r\n /**\r\n * 削除ボタンクリックイベントを処理します。\r\n * @param event\r\n * @param pwassword\r\n */\r\n const onRemoveClick = async (event: React.MouseEvent, pwassword: string) => {\r\n // 非同期通信\r\n await dispatch(onDeleteFilesAsync({ keys: selectedItems.map(row => row.key), directoryName}, pwassword));\r\n };\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n dispatch(FileManageSlice.actions.toggleDeleteDialog(false));\r\n };\r\n\r\n return (\r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect, useRef } from 'react';\r\n// material-ui\r\nimport MaterialTable, { MTableBodyRow, Column, MTableToolbar } from 'material-table';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport indigo from '@material-ui/core/colors/indigo';\r\nimport Box from '@material-ui/core/Box';\r\nimport { FolderOutlined, Image, PictureAsPdf, InsertDriveFileOutlined, Search, ArrowForwardIos, NavigateNext, Save } from '@material-ui/icons';\r\n//import { GrDocumentPdf } from 'react-icons/gr';\r\n//import DescriptionIcon from '@material-ui/icons/Description';\r\nimport { MuiTableIcons, MuiLocalizationJapanese } from '../../../../../components/MuiTable';\r\n// component\r\nimport OverflowTooltip from '../../../../../components/OverflowTooltip';\r\n// type\r\nimport { S3FileListItem, FileListType, S3ItemListType } from '../../_types';\r\nimport { Chip, Button, Paper, TextField, InputAdornment, Breadcrumbs, Typography, Link, IconButton } from '@material-ui/core';\r\nimport MuiRemoveButton from '../../../../../components/Buttons/MuiRemoveButton';\r\n\r\n/** スタイルを提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // テーブルソートヘッダー\r\n sortHeader: {\r\n // ソートされているカラム ヘッダー\r\n \"& .MuiTableSortLabel-active\": {\r\n color: theme.palette.text.primary,\r\n },\r\n // ソートアイコンカラー\r\n \"& .MuiTableSortLabel-active .MuiTableSortLabel-icon\": {\r\n color: `${theme.palette.text.primary}!important` as any,\r\n },\r\n // material-table スクロールバーをデフォルトに上書き\r\n \"& > div > div > div > div\": {\r\n overflowY: \"visible !important\",\r\n },\r\n },\r\n // 帳票アイコンボタン\r\n icon: {\r\n color: theme.palette.text.secondary\r\n }\r\n\r\n })\r\n);\r\n\r\n/** S3ファイルのテーブルの Props を提供します。 */\r\ninterface Props {\r\n /** ソートの可否をを表します。 */\r\n enableSorting : boolean,\r\n /** データソースを表します。 */\r\n dataSource: S3FileListItem[],\r\n /** ファイルリンク クリックイベントを表します。 */\r\n onClickLink: (e: React.MouseEvent, row: S3FileListItem) => void,\r\n /** タイトルコンポーネントを表します。 */\r\n titleComponent: JSX.Element,\r\n /** 選択項目変更イベント処理します。 */\r\n onSelectionChange: (rows: S3FileListItem[]) => void;\r\n}\r\n\r\n/** S3ファイルのテーブルの State を提供します。 */\r\ninterface State {\r\n /** テーブルのカラムを表します。 */\r\n columns: Column[]\r\n}\r\n\r\n/**\r\n * ファイルアイコンを表示します。\r\n * @param type ファイル種別を指定します。\r\n */\r\nfunction FileTypeIcon(type?: S3ItemListType): JSX.Element {\r\n switch (type) {\r\n case \"フォルダ\":\r\n // フォルダ\r\n return ;\r\n case FileListType.Pdf:\r\n // PDF\r\n return ;\r\n //case FileListType.Png:\r\n //case FileListType.Jpeg:\r\n //case FileListType.Jpg:\r\n // // 画像\r\n // return ;\r\n default:\r\n // その他ファイル\r\n return ;\r\n };\r\n}\r\n\r\n/**\r\n * S3ファイル画面テーブルを表示します。\r\n * @param props\r\n */\r\nexport function S3FileTable(props: Props): JSX.Element {\r\n\r\n const data = React.useMemo(() => props.dataSource.map(item => ({ ...item })), [props.dataSource])\r\n\r\n const tableRef = React.useRef();\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n /**S3ファイルテーブルのカラムを表します。 */\r\n const columnData: Column[] = [\r\n {\r\n title: \"名前\",\r\n field: \"name\",\r\n width: \"50%\",\r\n render: (rowData: S3FileListItem) => (\r\n <>\r\n {FileTypeIcon(rowData.type)}\r\n \r\n props.onClickLink(e, rowData)}>{rowData.name}\r\n \r\n \r\n ),\r\n },\r\n {\r\n title: \"タイプ\",\r\n field: \"type\",\r\n },\r\n {\r\n title: \"最終更新\",\r\n field: \"lastModified\",\r\n },\r\n {\r\n title: \"サイズ\",\r\n field: \"size\",\r\n align: \"right\",\r\n headerStyle: {\r\n textAlign: \"left\",\r\n },\r\n },\r\n ]\r\n\r\n return (\r\n \r\n ({\r\n color: \"primary\"\r\n }),\r\n toolbarButtonAlignment: \"left\",\r\n // actionsColumnIndex: -1\r\n }}\r\n columns={columnData}\r\n data={data}\r\n // actions={[\r\n // (rowData: S3FileListItem) => ({\r\n // icon: 'save',\r\n // tooltip: 'ダウンロード',\r\n // onClick: (event, rows) => props.onClickLink(event, rowData),\r\n // //hidden: rowData.type === \"\",\r\n // }),\r\n // ]}\r\n onSelectionChange={(rows) => props.onSelectionChange(rows)}\r\n // onOrderChange={onOrderChange}\r\n // actions={[\r\n // {\r\n // tooltip: 'Remove All Selected Users',\r\n // icon: \"delete\",\r\n // onClickDir: (evt, data) => alert('You want to delete. ')\r\n // }\r\n // ]}\r\n components={{\r\n //Toolbar: props => (\r\n //
\r\n // \r\n //
\r\n // \r\n // \r\n //
\r\n //
\r\n //),\r\n //Action: props => (\r\n // props.action.onClickDir(event, props.data)}\r\n // style={{ textTransform: 'none', marginLeft: 2 }}\r\n // >\r\n // 削除\r\n // \r\n //),\r\n }}\r\n />\r\n\r\n
\r\n )\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect, useCallback, useMemo, useRef} from 'react';\r\nimport { Box, Button, Breadcrumbs, Typography, Link} from '@material-ui/core';\r\nimport { NavigateNext } from '@material-ui/icons';\r\nimport path from 'path';\r\nimport { HomeDirectoryType } from '../../_types';\r\n\r\n\r\n/** パンくずリストの Props を提供します。 */\r\ninterface S3BreadcrumbsProps {\r\n /** ディレクトリ名を表します。 */\r\n directoryName: string,\r\n /** クリックイベントを表します。 */\r\n onClickBreadcrumb: (e: React.MouseEvent, key: string) => void,\r\n}\r\n/**\r\n * パンくずリストを表示します。\r\n * @param props\r\n */\r\nexport const S3Breadcrumbs = React.memo(\r\n function S3BreadcrumbsRN(props: S3BreadcrumbsProps): React.ReactElement {\r\n const directoryNames: string[] = props.directoryName.replace(/\\/$/, '').split(\"/\");\r\n const root = directoryNames.shift() ?? \"\";\r\n return (\r\n } aria-label=\"breadcrumb\">\r\n {directoryNames.length &&\r\n directoryNames.map((name, index) => {\r\n if (!name) return null;\r\n if (index > 0 && directoryNames.length - 1 === index) {\r\n return ({name});\r\n } else {\r\n const fileName = name === HomeDirectoryType.Document ? \"ドキュメント\"\r\n : name === HomeDirectoryType.OnlineHelp ? \"オンラインヘルプ\"\r\n : name;\r\n return ( props.onClickBreadcrumb(e, path.join(root, ...directoryNames.slice(0, index + 1)))}>{fileName});\r\n }\r\n })}\r\n \r\n );\r\n }\r\n);\r\n","// react\r\nimport * as React from 'react';\r\nimport { useCallback, useEffect } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { OtherReportSlice, onGetAsync } from '../../../../../modules/slice/other-report/other-report-slice';\r\n// type\r\nimport { S3FileListItem, HomeDirectoryType, DirectoryItem } from '../../_types';\r\nimport { S3FileTable } from './S3FileTable';\r\nimport { FileManageAdapter } from '../../../../../modules/adapter/file-manage/file-manage-adapter';\r\nimport { FileManageUtility } from '../../../../../modules/adapter/file-manage/file-manage-utility';\r\nimport { onGetListFilesAsync, onGetFileAsync, FileManageSlice } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport { S3Breadcrumbs } from './TableTitle';\r\nimport path from 'path';\r\n\r\n/**\r\n * S3ファイル画面テーブルを表示します。\r\n */\r\nexport function S3FileTableContainer(): JSX.Element {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const data: S3FileListItem[] = useSelector((state: RootState) => state.fileManage.result.getFileListResult?.items ?? []);\r\n const directoryName = useSelector((state: RootState) => FileManageUtility.toDirectoryKey(state.fileManage.item.directoryItem));\r\n const isOnlineHelpRoot: boolean = useSelector((state: RootState) =>\r\n state.fileManage.item.directoryItem.home === HomeDirectoryType.OnlineHelp && state.fileManage.item.directoryItem.sub?.length < 1\r\n );\r\n\r\n /**\r\n * リンククリックイベントを処理します。\r\n * @param key キーを指定します。\r\n */\r\n const onClickLink = useCallback(async (e: React.MouseEvent, row: S3FileListItem) => {\r\n e.preventDefault();\r\n\r\n if (row.type === \"フォルダ\") {\r\n // フォルダ\r\n await dispatch(onGetListFilesAsync({ key: row.key }));\r\n } else if (row.type === \"pdf\") {\r\n // ファイル\r\n const resp = await FileManageAdapter.instance.getFileAsync({ key: row.key });\r\n if (resp.isError) {\r\n dispatch(FileManageSlice.actions.showErrorMessage(resp.errorMessage));\r\n } else if (resp.file == null) {\r\n dispatch(FileManageSlice.actions.showErrorMessage(`ファイル情報がありません file:${resp.file}`));\r\n } else {\r\n FileManageUtility.downloadBlobObject(resp.file, row.name);\r\n };\r\n } else {\r\n dispatch(FileManageSlice.actions.showErrorMessage(\"未定義のファイルです。\"));\r\n };\r\n\r\n }, [dispatch]);\r\n\r\n /**\r\n * フォルダ―クリックイベントを処理します。\r\n * @param key キーを指定します。\r\n */\r\n const onClickFolderLink = useCallback(async (e: React.MouseEvent, key: string) => {\r\n e.preventDefault();\r\n await dispatch(onGetListFilesAsync({ key }));\r\n }, [dispatch]);\r\n\r\n /**\r\n * 選択行変更イベントを処理します。\r\n * @param rows 行を指定します。\r\n */\r\n const onSelectionChange = useCallback((rows: S3FileListItem[]) => {\r\n dispatch(FileManageSlice.actions.selectedRows(rows));\r\n }, [dispatch]);\r\n\r\n return (\r\n }\r\n />\r\n\r\n )\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useMemo, useCallback } from 'react';\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { Dialog, DialogTitle, DialogContent, DialogActions, DialogContentText, IconButton, List, ListItem, ListItemText, ListItemSecondaryAction, Paper, ListSubheader, makeStyles, Theme, createStyles, Chip, Button, ListItemIcon, TableContainer, Table, TableBody, TableRow, TableCell, Typography, Box, fade } from '@material-ui/core';\r\nimport { Cancel, Delete, CloudUploadOutlined, CloudUpload, NoteAddOutlined, Warning } from '@material-ui/icons';\r\nimport { CSSProperties } from '@material-ui/core/styles/withStyles';\r\nimport MuiCancelButton from '../../../../../components/Buttons/MuiCancelButton';\r\nimport MuiColorButton from '../../../../../components/Buttons/ColorButton/MuiColorButton';\r\nimport { S3FileListItem } from '../../_types';\r\nimport clsx from 'clsx';\r\n\r\n/** スタイル情報を提供します。 */\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n dropzone: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n dropzoneIcon: {\r\n fontSize: 80,\r\n color: 'gray'\r\n },\r\n paper: {\r\n minHeight: 250,\r\n maxHeight: 250,\r\n },\r\n list: {\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n newFile: {\r\n backgroundColor: `${theme.palette.background.paper}!important` //\r\n }, \r\n updateFile: {\r\n backgroundColor: `${fade(theme.palette.warning.main, 0.3)}!important` //\r\n }, \r\n }),\r\n);\r\n\r\n/** アップロードダイアログの Props を提供します。 */\r\nexport interface UploadDialogProps {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** アップロードボタンクリック時の処理を表します。 */\r\n onClickUpload: (event: React.MouseEvent, files: File[]) => void,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n /** 既存ファイルリストを表します。 */\r\n fileList: string[],\r\n};\r\n\r\n/** ベーススタイルを表します。 */\r\nconst baseStyle: CSSProperties = {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: \"10px\",\r\n borderWidth: 2,\r\n borderRadius: 2,\r\n borderColor: \"#9e9e9e\",\r\n borderStyle: \"dashed\",\r\n backgroundColor: \"#e0e0e0\",\r\n color: \"#424242\",\r\n outline: \"none\",\r\n transition: \"border .24s ease-in-out\",\r\n height: \"200px\",\r\n};\r\n\r\n/** ドロップ可能状態のスタイルを表します。 */\r\nconst acceptStyle: CSSProperties = {\r\n borderColor: \"#afeeee\",\r\n backgroundColor: \"#e0ffff\"\r\n};\r\n\r\n/** ドロップ拒否状態のスタイルを表します。 */\r\nconst rejectStyle: CSSProperties = {\r\n borderColor: \"#ff7f50\",\r\n backgroundColor: \"#ffe4e1\"\r\n};\r\n\r\n/**\r\n * アップロードダイアログを表示します。\r\n * @param props\r\n */\r\nexport function UploadDialog(props: UploadDialogProps): JSX.Element {\r\n const classes = useStyles();\r\n\r\n /** アップロ―ドファイル */\r\n const [uploadFiles, setUploadFiles] = useState([]);\r\n\r\n /** 許可ファイルのドロップイベントを処理します。*/\r\n const onDropAccepted = useCallback((acceptedFiles: File[]) => {\r\n setUploadFiles((prevState) => {\r\n const result = [...prevState];\r\n acceptedFiles.forEach((file, index, self) => {\r\n const fileIndex = result.findIndex((val, valIndex, valSelf) => val.name.toLowerCase() == file.name.toLowerCase());\r\n if (fileIndex < 0) {\r\n result.push(file);\r\n } else {\r\n result.splice(fileIndex, 1, file);\r\n }\r\n });\r\n return [...result.slice(0, 10)];\r\n });\r\n }, [uploadFiles]);\r\n\r\n /** ドロップゾーンのカスタムコンポーネントを表します。 */\r\n const {getRootProps, getInputProps, isDragAccept, isDragReject, open} = useDropzone({\r\n noClick: true,\r\n noKeyboard: true,\r\n onDropAccepted,\r\n accept: {\r\n //'image/jpeg': [],\r\n //'image/png': [],\r\n 'application/pdf': [],\r\n },\r\n //maxFiles: 10,\r\n maxSize: 5000000, // 5MB\r\n multiple: true,\r\n });\r\n\r\n /** スタイル情報をメモ化します。 */\r\n const style = useMemo(() =>\r\n ({\r\n ...baseStyle,\r\n ...(isDragAccept ? acceptStyle : {}),\r\n ...(isDragReject ? rejectStyle : {})\r\n }),\r\n [isDragReject, isDragAccept]\r\n );\r\n\r\n /** ファイルを削除します。 */\r\n const removeFile = (file: File) => {\r\n const newFiles = [...uploadFiles]\r\n newFiles.splice(newFiles.indexOf(file), 1)\r\n setUploadFiles(newFiles)\r\n }\r\n\r\n /** 全てのファイルを削除します。*/\r\n const removeAllFiles = () => {\r\n setUploadFiles([]);\r\n }\r\n\r\n /** ダイアログを閉じるときの処理を行います。 */\r\n const onClose = () => {\r\n removeAllFiles();\r\n props.handleClose();\r\n };\r\n\r\n /** アップロードイベント処理を行います。 */\r\n const onUpload = (event: React.MouseEvent) => {\r\n props.onClickUpload(event, uploadFiles);\r\n removeAllFiles();\r\n };\r\n\r\n /** ファイルリストを表示します。 */\r\n const renderFileList = React.useMemo(() => (\r\n \r\n \r\n {uploadFiles.map((file, index) => {\r\n {/* 新規 または 更新 判定 */ }\r\n const isUpdate = props.fileList.includes(file.name.toLowerCase());\r\n return (\r\n \r\n \r\n {isUpdate\r\n ? } />\r\n : } />}\r\n \r\n \r\n {file.name}\r\n \r\n \r\n removeFile(file)}>\r\n \r\n \r\n \r\n\r\n \r\n );\r\n })}\r\n\r\n \r\n
\r\n\r\n ), [removeFile, uploadFiles, props.fileList])\r\n\r\n return (\r\n \r\n ファイルアップロード\r\n \r\n \r\n アップロードするファイル選択します。\r\n
\r\n 1ファイルあたり最大5MBまで、同時に最大10個までアップロードできます。\r\n
\r\n アップロード出来るファイルは.pdfです。\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n
ここにファイルをドロップ\r\n
または\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n 選択ファイル {uploadFiles.length}個\r\n 既に同名ファイルが存在する場合は、上書き保存します。\r\n \r\n {/* 選択ファイル一覧 */}\r\n {renderFileList}\r\n \r\n\r\n
\r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n }\r\n disabled={(uploadFiles.length < 1)}\r\n // onClick={(e) => props.onClickUpload(e, uploadFiles)}\r\n onClick={(e) => onUpload(e)}\r\n >\r\n アップロード\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { UploadDialog } from './UploadDialog';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../../../rootReducer';\r\nimport { FileManageSlice, onPutFilesAsync } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport { FileInfo, S3FileListItem } from '../../_types';\r\nimport path from 'path';\r\nimport { FileManageUtility } from '../../../../../modules/adapter/file-manage/file-manage-utility';\r\n\r\n/**\r\n * アップロードダイアログを表示します。\r\n * @param props\r\n */\r\nexport function UploadDialogContainer(): JSX.Element {\r\n\r\n const dispatch = useDispatch();\r\n\r\n const isOpen = useSelector((state: RootState) => state.fileManage.item.isOpenUploadDialog ?? false);\r\n const directoryName = useSelector((state: RootState) => FileManageUtility.toDirectoryKey(state.fileManage.item.directoryItem));\r\n const fileList: string[] = useSelector((state: RootState) =>\r\n state.fileManage.result.getFileListResult?.items\r\n .filter(file => file.type === \"pdf\")\r\n .map((file) => file.name.toLowerCase()) // 小文字比較で、新規・更新の判定を行う。\r\n ?? []);\r\n \r\n /**\r\n * アップロードボタンクリックイベントを処理します。\r\n * @param event\r\n * @param files\r\n */\r\n const onClickUpload = async (event: React.MouseEvent, uploadFiles: File[]) => {\r\n // 非同期通信\r\n await dispatch(onPutFilesAsync({\r\n files: [...uploadFiles.map(f => ({ key: path.join(directoryName, f.name), file:f } as FileInfo))]\r\n }));\r\n };\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n dispatch(FileManageSlice.actions.toggleUploadDialog(false));\r\n };\r\n\r\n return (<>\r\n {isOpen && }\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Dialog, DialogActions, DialogTitle, DialogContent, Typography, TextField,Box, DialogContentText, Button, useTheme, makeStyles, Theme, createStyles, Divider} from '@material-ui/core';\r\nimport MaterialTable, { Column, Options } from 'material-table';\r\nimport { MuiTableIcons, MuiLocalizationJapanese, MuiTableOptions, useSortHeaderStyles } from '../../../../../components/MuiTable';\r\nimport { indigo, green, red, grey } from '@material-ui/core/colors';\r\nimport { PutedFileItem } from '../../_types';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\n\r\n/** 結果ダイアログの Props を表示します。 */\r\nexport interface UploadResultDialogProps {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n /** エラー有無を表します。 */\r\n isError: boolean,\r\n /** エラーメッセージを表します。 */\r\n errorMessage?: string, \r\n /** 処理に成功したファイルの一覧を表します。 */\r\n successedDataSource: PutedFileItem[],\r\n /** 処理に失敗したファイルの一覧を表します。 */\r\n failedDataSource: PutedFileItem[],\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // アラート\r\n alert: {\r\n alignItems: \"center\",\r\n \"& .MuiAlert-icon\": {\r\n fontSize: 40\r\n }\r\n }\r\n\r\n })\r\n);\r\n\r\n/** material-table の 共通オプションを提供します。 */\r\nconst TableOptions: Options = {\r\n ...MuiTableOptions,\r\n paging: false,\r\n maxBodyHeight: \"25vh\", // 固定\r\n rowStyle: { padding: 4 },\r\n headerStyle: { padding: 4 }, // theme.spacing(0.5)\r\n}\r\n\r\n/** テーブルのカラムを表します。 */\r\nconst successedTableColumn: Column[] = [\r\n {\r\n title: \"名前\",\r\n field: \"key\",\r\n },\r\n];\r\n\r\n/** テーブルのカラムを表します。 */\r\nconst failedTableColumn: Column[] = [\r\n {\r\n title: \"名前\",\r\n field: \"key\",\r\n headerStyle: {\r\n minWidth: 400,\r\n },\r\n },\r\n {\r\n title: \"エラー内容\",\r\n field: \"message\",\r\n headerStyle: {\r\n width: 300,\r\n maxWidth: 300,\r\n whiteSpace: 'normal',\r\n wordBreak: 'break-word',\r\n },\r\n },\r\n];\r\n\r\n\r\n/** 結果ダイアログを表示します。 */\r\nexport function UploadResultDialog(props: UploadResultDialogProps): JSX.Element {\r\n\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n /** スタイルクラスを提供します。 */\r\n const tableStyle = useSortHeaderStyles();\r\n const classes = useStyles();\r\n\r\n /** タイトルアラートを表示します。 */\r\n const renderAlert = () => {\r\n if (props.isError) {\r\n // エラー\r\n return (\r\n \r\n Error\r\n アップロードに失敗しました。
\r\n {props.errorMessage}\r\n
\r\n )\r\n } else if (!(props.failedDataSource.length) && !(props.successedDataSource.length)) {\r\n // 正常だが、結果情報が空\r\n return 結果情報がありません。\r\n\r\n } else { \r\n // 正常\r\n return (!(props.failedDataSource.length)\r\n ? アップロードに成功しました。\r\n : アップロードに失敗したファイルがあります。\r\n );\r\n }\r\n };\r\n\r\n return (\r\n \r\n\r\n ファイルアップロード結果\r\n\r\n \r\n {/* メッセージ */}\r\n {renderAlert}\r\n \r\n {/* 正常終了 ファイル */}\r\n \r\n 成功 {props.successedDataSource.length} 個\r\n ({ ...item }))}\r\n />\r\n \r\n\r\n {/* エラー ファイル */}\r\n \r\n エラー {props.failedDataSource.length} 個\r\n ({ ...item }))}\r\n />\r\n \r\n\r\n\r\n \r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n 閉じる\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { UploadResultDialog } from './UploadResultDialog';\r\nimport { FileManageSlice } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\n/** 結果ダイアログを表示します。 */\r\nexport function UploadResultDialogContainer() {\r\n const dispatch = useDispatch();\r\n\r\n const isOpen = useSelector((state: RootState) => state.fileManage.item.isOpenUploadResultDialog);\r\n const result = useSelector((state: RootState) => state.fileManage.result.putResult);\r\n \r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = async () => {\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isUpdated: true,\r\n isOpenUploadResultDialog: false\r\n }));\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Dialog, DialogActions, DialogTitle, DialogContent, Typography, TextField, Box, DialogContentText, Button, useTheme, makeStyles, Theme, createStyles, Divider } from '@material-ui/core';\r\nimport MaterialTable, { Column, Options } from 'material-table';\r\nimport { MuiTableIcons, MuiLocalizationJapanese, MuiTableOptions, useSortHeaderStyles } from '../../../../../components/MuiTable';\r\nimport { indigo, green, red, grey } from '@material-ui/core/colors';\r\nimport { DeletedFileItem } from '../../_types';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\n\r\n/** 結果ダイアログの Props を表示します。 */\r\nexport interface DeleteResultDialogProps {\r\n /** ダイアログが表示されているかどうかを表します。 */\r\n isOpen: boolean,\r\n /** ダイアログの閉じる処理を表します。 */\r\n handleClose: () => void,\r\n /** エラー有無を表します。 */\r\n isError: boolean,\r\n /** エラーメッセージを表します。 */\r\n errorMessage?: string,\r\n /** 処理に成功したファイルの一覧を表します。 */\r\n successedDataSource: DeletedFileItem[],\r\n /** 処理に失敗したファイルの一覧を表します。 */\r\n failedDataSource: DeletedFileItem[],\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n // アラート\r\n alert: {\r\n alignItems: \"center\",\r\n \"& .MuiAlert-icon\": {\r\n fontSize: 40\r\n }\r\n }\r\n\r\n })\r\n);\r\n\r\n/** material-table の 共通オプションを提供します。 */\r\nconst TableOptions: Options = {\r\n ...MuiTableOptions,\r\n paging: false,\r\n maxBodyHeight: \"25vh\", // 固定\r\n rowStyle: { padding: 4 },\r\n headerStyle: { padding: 4 }, // theme.spacing(0.5)\r\n}\r\n\r\n/** テーブルのカラムを表します。 */\r\nconst successedTableColumn: Column[] = [\r\n {\r\n title: \"名前\",\r\n field: \"key\",\r\n },\r\n];\r\n\r\n/** テーブルのカラムを表します。 */\r\nconst failedTableColumn: Column[] = [\r\n {\r\n title: \"名前\",\r\n field: \"key\",\r\n headerStyle: {\r\n minWidth: 400,\r\n },\r\n },\r\n {\r\n title: \"エラー内容\",\r\n field: \"message\",\r\n headerStyle: {\r\n width: 300,\r\n maxWidth: 300,\r\n whiteSpace: 'normal',\r\n wordBreak: 'break-word',\r\n },\r\n },\r\n];\r\n\r\n\r\n/** 結果ダイアログを表示します。 */\r\nexport function DeleteResultDialog(props: DeleteResultDialogProps): JSX.Element {\r\n /** Theme を提供します。*/\r\n const theme = useTheme();\r\n /** スタイルクラスを提供します。 */\r\n const tableStyle = useSortHeaderStyles();\r\n const classes = useStyles();\r\n\r\n /** タイトルアラートを表示します。 */\r\n const renderAlert = () => {\r\n if (props.isError) {\r\n // エラー\r\n return (\r\n \r\n Error\r\n ファイル削除に失敗しました。
\r\n {props.errorMessage}\r\n
\r\n )\r\n } else if (!(props.failedDataSource.length) && !(props.successedDataSource.length)) {\r\n // 正常だが、結果情報が空\r\n return 結果情報がありません。\r\n\r\n } else {\r\n // 正常\r\n return (!(props.failedDataSource.length)\r\n ? ファイル削除に成功しました。\r\n : ファイル削除に失敗したファイルがあります。\r\n );\r\n }\r\n };\r\n\r\n return (\r\n \r\n\r\n ファイル削除結果\r\n\r\n \r\n {/* メッセージ */}\r\n {renderAlert}\r\n\r\n {/* 正常終了 ファイル */}\r\n \r\n 成功 {props.successedDataSource.length} 個\r\n ({ ...item }))}\r\n />\r\n \r\n\r\n {/* エラー ファイル */}\r\n \r\n エラー {props.failedDataSource.length} 個\r\n ({ ...item }))}\r\n />\r\n \r\n\r\n\r\n \r\n\r\n {/* ボタンアクション */}\r\n \r\n \r\n 閉じる\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { DeleteResultDialog } from './DeleteResultDialog';\r\nimport { FileManageSlice } from '../../../../../modules/slice/file-manage/file-manage-slice';\r\nimport { RootState } from '../../../../../rootReducer';\r\n\r\n\r\n/** 結果ダイアログを表示します。 */\r\nexport function DeleteResultDialogContainer() {\r\n const dispatch = useDispatch();\r\n\r\n const isOpen = useSelector((state: RootState) => state.fileManage.item.isOpenDeleteResultDialog);\r\n const result = useSelector((state: RootState) => state.fileManage.result.deleteResult);\r\n\r\n /**\r\n * ダイアログを非表示にします。\r\n */\r\n const closeDialog = () => {\r\n dispatch(FileManageSlice.actions.updateItemPartial({\r\n isUpdated: true,\r\n isOpenDeleteResultDialog : false,\r\n }));\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n","// react\r\nimport * as React from 'react';\r\nimport { useState, useEffect, useCallback, useMemo, useRef, ChangeEventHandler } from 'react';\r\n// redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { changeReportPageHeader } from '../../../modules/slice/global-header/global-header-slice';\r\n\r\nimport { AppTitle } from '../../Shared/app-title';\r\n// S3\r\nimport { FileManageSlice, onGetListFilesAsync } from '../../../modules/slice/file-manage/file-manage-slice';\r\nimport MuiBackDropProgress from '../../../components/MuiBackDropProgress/MuiBackDropProgress';\r\nimport MuiSnackbar from '../../../components/MuiSnackbar/MuiSnackbar';\r\nimport { ControlButtonsContainer } from './components/HeaderContent/ControlButtonsContainer';\r\nimport { CreateFolderDialogContainer } from './components/DialogContents/CreateFolderDialogContainer';\r\nimport { HomeDirTypeToggleContainer } from './components/HeaderContent/HomeTypeToggleContainer';\r\nimport { DeleteDialogContainer } from './components/DialogContents/DeleteDialogContainer';\r\nimport { S3FileTableContainer } from './components/TableContent/S3FileTableContainer';\r\nimport { UploadDialogContainer } from './components/DialogContents/UploadDialogContainer';\r\nimport { UploadResultDialogContainer } from './components/DialogContents/UploadResultDialogContainer';\r\nimport { DeleteResultDialogContainer } from './components/DialogContents/DeleteResultDialogContainer';\r\nimport path from 'path';\r\n\r\nconst fileImage = new Image();\r\nexport const useHooks = () => {\r\n const imageContainerRef = useRef(null);\r\n const [objectURL, setObjectURL] = useState(\"\");\r\n const resetSelection = () => {\r\n fileImage.src = \"\";\r\n const imageContainer = imageContainerRef.current;\r\n if (imageContainer && fileImage.parentNode === imageContainer) {\r\n imageContainer.removeChild(fileImage);\r\n }\r\n if (objectURL) {\r\n window.URL.revokeObjectURL(objectURL);\r\n setObjectURL(\"\");\r\n }\r\n };\r\n const handleFiles: ChangeEventHandler = (event) => {\r\n const files = event.currentTarget.files;\r\n resetSelection();\r\n if (!files || files?.length === 0) return;\r\n const file = files[0];\r\n if (!file.type.includes(\"image/\")) {\r\n event.currentTarget.value = \"\";\r\n return;\r\n }\r\n const imageContainer = imageContainerRef.current;\r\n if (!imageContainer) return;\r\n const objectURL = window.URL.createObjectURL(file);\r\n fileImage.src = objectURL;\r\n imageContainer.appendChild(fileImage);\r\n setObjectURL(objectURL);\r\n };\r\n return { handleFiles, imageContainerRef };\r\n};\r\n\r\n/** S3ファイル管理画面 を表示します。*/\r\nexport const FileManagePage: React.FC<{}> = () => {\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isLoading = useSelector((state: RootState) => state.fileManage.isLoading);\r\n const isShowMessage = useSelector((state: RootState) => state.fileManage.isShowMessage);\r\n const message = useSelector((state: RootState) => state.fileManage.message);\r\n const isUpdated = useSelector((state: RootState) => state.fileManage.item.isUpdated);\r\n const directoryName = useSelector((state: RootState) => path.join(state.fileManage.item.directoryItem.root, state.fileManage.item.directoryItem.home, ...state.fileManage.item.directoryItem.sub));\r\n\r\n useEffect(() => {\r\n if (isUpdated) {\r\n dispatch(onGetListFilesAsync({ key: directoryName }));\r\n }\r\n }, [isUpdated, directoryName, dispatch])\r\n\r\n /** Snackbar の閉じる処理を行います。 */\r\n const onSnackbarClose = () => {\r\n dispatch(FileManageSlice.actions.hideMessage());\r\n };\r\n\r\n\r\n // Mount, Unmount時\r\n useEffect(() => {\r\n dispatch(changeReportPageHeader(AppTitle.fileManage.title));\r\n }, []);\r\n \r\n return (\r\n <>\r\n {/* ローディング表示 */}\r\n \r\n\r\n {/* Snackbar 表示 */}\r\n \r\n\r\n {/* ディレクトリ変更 */}\r\n \r\n\r\n {/* 操作ボタン */}\r\n \r\n\r\n {/* ダイアログ */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* テーブル */}\r\n \r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { FileManagePage } from './FileManage';\r\nimport { HeaderPage } from '../Shared/HeaderPage/HeaderPage';\r\n\r\n/**\r\n * ファイル管理(FileManage)画面を表します。\r\n */\r\nexport const UploadPage: React.FC<{}> = () => {\r\n return (\r\n } />\r\n );\r\n};\r\n","import { ThemeOptions } from '@material-ui/core/styles';\r\n\r\n/** 共通のテーマを提供します。 */\r\nexport const commonTheme: ThemeOptions = {\r\n // デフォルト設定\r\n props: {\r\n // 入力フィールド\r\n MuiTextField: {\r\n color: \"secondary\",\r\n variant: \"outlined\",\r\n margin: \"dense\",\r\n },\r\n // ボタン\r\n MuiButton: {\r\n variant: \"contained\",\r\n },\r\n },\r\n\r\n typography: {\r\n // ボタン\r\n button: {\r\n // 大文字表示しない\r\n textTransform: \"none\"\r\n }\r\n },\r\n // オーバーライド\r\n overrides: {\r\n // テーブル ヘッダー\r\n MuiTableHead: {\r\n root: {\r\n whiteSpace: \"nowrap\",\r\n }\r\n },\r\n // テーブル 行\r\n MuiTableRow: {\r\n root: {\r\n whiteSpace: \"nowrap\",\r\n }\r\n },\r\n // テーブル セル\r\n MuiTableCell: {\r\n root: {\r\n // 行間隔\r\n padding: \"8px\",\r\n },\r\n head: {\r\n\r\n fontWeight: \"bold\",\r\n }\r\n },\r\n\r\n // カード\r\n MuiCardContent: {\r\n root: {\r\n // 最終要素に自動付与される\r\n \"&:last-child\": {\r\n paddingBottom: \"16px\"\r\n }\r\n }\r\n },\r\n // ボタン\r\n MuiButton: {\r\n root: {\r\n minWidth: \"200px\",\r\n }\r\n },\r\n // フォームラベル *\r\n MuiFormLabel: {\r\n asterisk: {\r\n color: \"#f44336\",\r\n \"&$error\": {\r\n color: \"#f44336\"\r\n },\r\n }\r\n },\r\n }\r\n};\r\n","import { createMuiTheme } from '@material-ui/core/styles';\r\nimport teal from '@material-ui/core/colors/teal';\r\nimport { commonTheme } from './commonTheme';\r\n\r\n/** デフォルトのテーマを提供します。 */\r\nexport const defaultTheme = createMuiTheme({\r\n palette: {\r\n type: \"light\",\r\n secondary: {\r\n main: \"#00796b\",\r\n },\r\n background: {\r\n default: \"#e0e0e0\",\r\n },\r\n },\r\n // オーバーライド\r\n overrides: {\r\n // テーブル 行\r\n MuiTableRow: {\r\n root: {\r\n // ホバーカラー\r\n \".MuiTableBody-root &:hover\": {\r\n backgroundColor: \"rgba(63, 81, 181, 0.2)\"\r\n },\r\n // 行の縞模様\r\n \"&:nth-of-type(odd)\": {\r\n backgroundColor: \"rgba(0, 0, 0, 0.04)\"\r\n },\r\n }\r\n },\r\n // 入力フォームラベル\r\n MuiFormLabel: {\r\n root: {\r\n \"&.Mui-focused\": {\r\n color: \"#000\"\r\n },\r\n },\r\n colorSecondary: {\r\n \"&.Mui-focused\": {\r\n color: \"#000\"\r\n }\r\n },\r\n },\r\n /** カレンダー **/\r\n // ツールバー\r\n MuiPickersToolbar: {\r\n toolbar: {\r\n backgroundColor: teal[\"500\"],\r\n },\r\n },\r\n // ヘッダー\r\n MuiPickersCalendarHeader: {\r\n switchHeader: {\r\n },\r\n },\r\n // 年選択\r\n MuiPickersYear: {\r\n root: {\r\n \"&:focus\": {\r\n color: \"#000\",\r\n },\r\n },\r\n yearSelected: {\r\n color: \"#fff\",\r\n backgroundColor: teal[\"400\"],\r\n\r\n },\r\n yearDisabled: {\r\n color: teal[\"100\"],\r\n\r\n },\r\n },\r\n // 月選択\r\n MuiPickersMonth: {\r\n root: {\r\n \"&:focus\": {\r\n color: \"#000\",\r\n },\r\n },\r\n monthSelected: {\r\n color: \"#fff\",\r\n backgroundColor: teal[\"400\"],\r\n\r\n },\r\n monthDisabled: {\r\n color: teal[\"100\"],\r\n\r\n },\r\n },\r\n // 日付選択\r\n MuiPickersDay: {\r\n day: {\r\n color: \"#000\",\r\n },\r\n daySelected: {\r\n color: \"#fff\",\r\n backgroundColor: teal[\"400\"],\r\n \"&:hover\": {\r\n backgroundColor: teal[\"600\"],\r\n }\r\n },\r\n dayDisabled: {\r\n color: teal[\"100\"],\r\n },\r\n current: {\r\n color: teal[\"400\"],\r\n backgroundColor: \"rgba(0, 0, 0, 0.2)\",\r\n },\r\n },\r\n }\r\n}, commonTheme);\r\n","import { createMuiTheme } from \"@material-ui/core/styles\";\r\nimport teal from '@material-ui/core/colors/teal';\r\nimport { commonTheme } from \"./commonTheme\";\r\n\r\n/** ダークモーのテーマを提供します。 */\r\nexport const darkTheme = createMuiTheme({\r\n palette: {\r\n type: \"dark\",\r\n secondary: {\r\n main: \"#009688\",\r\n },\r\n },\r\n // オーバーライド\r\n overrides: {\r\n // テーブル 行\r\n MuiTableRow: {\r\n root: {\r\n // ホバーカラー\r\n \".MuiTableBody-root &:hover\": {\r\n backgroundColor: \"rgba(63, 81, 181, 0.2)\"\r\n },\r\n // 行の縞模様\r\n \"&:nth-of-type(odd)\": {\r\n backgroundColor: \"rgba(0, 0, 0, 0.04)\"\r\n },\r\n }\r\n },\r\n // 入力フォームラベル\r\n MuiFormLabel: {\r\n root: {\r\n \"&.Mui-focused\": {\r\n color: \"#fff\"\r\n },\r\n },\r\n colorSecondary: {\r\n \"&.Mui-focused\": {\r\n color: \"#fff\"\r\n }\r\n },\r\n },\r\n /** カレンダー **/\r\n // ツールバー\r\n MuiPickersToolbar: {\r\n toolbar: {\r\n backgroundColor: teal[\"500\"],\r\n },\r\n },\r\n // ヘッダー\r\n MuiPickersCalendarHeader: {\r\n switchHeader: {\r\n },\r\n },\r\n // 年選択\r\n MuiPickersYear: {\r\n root: {\r\n \"&:focus\": {\r\n color: \"#fff\",\r\n },\r\n },\r\n yearSelected: {\r\n color: \"#fff\",\r\n backgroundColor: teal[\"400\"],\r\n\r\n },\r\n yearDisabled: {\r\n color: teal[\"100\"],\r\n\r\n },\r\n },\r\n // 月選択\r\n MuiPickersMonth: {\r\n root: {\r\n \"&:focus\": {\r\n color: \"#fff\",\r\n },\r\n },\r\n monthSelected: {\r\n color: \"#fff\",\r\n backgroundColor: teal[\"400\"],\r\n\r\n },\r\n monthDisabled: {\r\n color: teal[\"100\"],\r\n\r\n },\r\n },\r\n // 日付選択\r\n MuiPickersDay: {\r\n day: {\r\n color: \"#fff\",\r\n },\r\n daySelected: {\r\n color: \"#fff\",\r\n backgroundColor: teal[\"400\"],\r\n \"&:hover\": {\r\n backgroundColor: teal[\"600\"],\r\n }\r\n },\r\n dayDisabled: {\r\n color: teal[\"100\"],\r\n },\r\n current: {\r\n color: teal[\"200\"],\r\n backgroundColor: \"rgba(255, 255, 255, 0.2)\",\r\n },\r\n },\r\n // リンク\r\n MuiLink: {\r\n root: {\r\n color: \"#66b2ff\",\r\n }\r\n }\r\n },\r\n}, commonTheme);\r\n","import { Theme } from '@material-ui/core/styles';\r\nimport { defaultTheme, darkTheme } from '../theme';\r\n\r\n/**\r\n * テーマ 関連の ユーティリティ機能を提供します。\r\n * */\r\nexport class ThemeUtility {\r\n\r\n //#region フィールド\r\n\r\n //#endregion フィールド\r\n\r\n\r\n //#region メソッド\r\n\r\n /**\r\n * Theme を返却します。\r\n * @param isDark\r\n */\r\n public static selectTheme(isDark: boolean): Theme {\r\n\r\n return isDark ? darkTheme : defaultTheme;\r\n\r\n };\r\n\r\n\r\n //#endregion メソッド\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { ThemeProvider } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { ThemeUtility } from '../../../theme/theme-utility';\r\n\r\n\r\n/**\r\n * Material-ui の テーマを使用するフレームを提供します。\r\n * @param param0\r\n */\r\nexport const ThemeFrame: React.FC<{}> = ({ children }) => {\r\n\r\n // Global State\r\n const isDark = useSelector((state: RootState) => state.theme.isDark);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { createStyles, withStyles, Theme } from '@material-ui/core/styles';\r\nimport LinearProgress from '@material-ui/core/LinearProgress';\r\n\r\n\r\n/**\r\n * 線形進捗バーを表示します。\r\n */\r\nconst StyledLinearProgress = withStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n height: 5,\r\n },\r\n colorPrimary: {\r\n backgroundColor: \"#4B7762\",\r\n },\r\n bar: {\r\n backgroundColor: \"#9bf9cc\",\r\n },\r\n }),\r\n)(LinearProgress);\r\n\r\n/**\r\n * 認証中のローディングを表示します。\r\n */\r\nexport const AuthorizeLoading: React.FC<{}> = () => {\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport { Typography, Button, Container } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n container: {\r\n marginTop: theme.spacing(4),\r\n },\r\n alert: {\r\n \"& .MuiAlert-icon\": {\r\n fontSize: \"3rem\"\r\n }\r\n },\r\n title: {\r\n fontSize: \"2rem\",\r\n },\r\n button: {\r\n marginTop: theme.spacing(2),\r\n }\r\n }),\r\n);\r\n\r\n\r\n/**  */\r\ninterface Props {\r\n /** メッセージを表します。*/\r\n message: string,\r\n /** 戻るボタンクリック処理を表します。*/\r\n onReturnClick: () => void,\r\n}\r\n\r\n/**\r\n * 認証失敗時のエラー画面を表示します\r\n */\r\nconst AuthorizeError: React.FC = (props) => {\r\n\r\n /** スタイルクラスを提供します。 */\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n\r\n 認証エラー\r\n\r\n {props.message}\r\n\r\n ユーザー情報の取得に失敗しました。\r\n 下の [サインイン画面に戻る] ボタンをクリックし、再度ログインしてください。\r\n\r\n \r\n サインイン画面に戻る\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default AuthorizeError;\r\n","import * as React from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { AppUrl } from '../../../app-url';\r\nimport { AuthorizeLoading } from '../AuthorizeLoading/AuthorizeLoading';\r\nimport AuthorizeError from '../AuthorizeError/AuthorizeError';\r\n\r\n\r\n/**ユーザー認証 の Props のインターフェースを提供します。*/\r\ninterface Props {\r\n /** サインイン済みがどうかを表します。 */\r\n isSigednin: boolean;\r\n /** 認証済みがどうかを表します。 */\r\n isAuthorized: boolean;\r\n /** 認証中かどうかを表します。 */\r\n isLoaded: boolean;\r\n /** 認証失敗かどうかを表します。 */\r\n isError: boolean;\r\n /** メッセージを表します。 */\r\n message: string;\r\n /** 戻るボタンクリック処理を表します。*/\r\n onReturnClick: () => void,\r\n}\r\n\r\n/**\r\n * ユーザー認証 コンポーネントを表示します。\r\n * @param props\r\n */\r\nexport const AuthorizePage: React.FC = (props) => {\r\n\r\n if (!props.isSigednin) {\r\n // サインインが未処理\r\n return \r\n }\r\n\r\n if (!props.isLoaded) {\r\n // 認証中はローディング画面表示\r\n return \r\n }\r\n\r\n if (props.isError) {\r\n // 認証失敗時はエラー画面表示\r\n return \r\n }\r\n\r\n if (!props.isAuthorized) {\r\n // ユーザー認証が未処理\r\n return \r\n }\r\n\r\n\r\n return (\r\n // 認証完了 → 各画面コンポーネントの表示\r\n <>{props.children}\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../../../rootReducer';\r\nimport { onGetAuthenticatedUserAsync, onSignOutAsync } from '../../../modules/slice/authentication/authentication-slice';\r\nimport { AuthorizePage } from './components/AuthorizePage/AuthorizePage';\r\n\r\n/**\r\n * ユーザー認証 コンポーネントを表示します。\r\n * @param props\r\n */\r\nexport const AuthorizeRouter: React.FC<{}> = (props) => {\r\n\r\n /** dispatch を提供します。*/\r\n const dispatch = useDispatch();\r\n\r\n // redux store\r\n const isSignedIn: boolean = useSelector((state: RootState) => state.signin.result.isSignedIn);\r\n const isAuthorized: boolean = !!useSelector((state: RootState) => state.authentication.user);\r\n const isLoaded = useSelector((state: RootState) => state.authentication.isLoaded);\r\n const isError = useSelector((state: RootState) => state.authentication.isError);\r\n const message = useSelector((state: RootState) => state.authentication.message ?? \"\");\r\n\r\n\r\n useEffect(() => {\r\n\r\n // useEffect 内で非同期処理定義\r\n const funcAsync = async () => await dispatch(onGetAuthenticatedUserAsync());\r\n\r\n // 実行\r\n if (isSignedIn && !isAuthorized) funcAsync();\r\n\r\n\r\n }, [dispatch, isAuthorized, isSignedIn])\r\n\r\n\r\n /** 戻るボタンクリック時の処理を行います。 */\r\n const onReturnClickAsync = async () => {\r\n\r\n // サインアウト処理(Storeをクリアする。)\r\n await dispatch(onSignOutAsync());\r\n\r\n }\r\n\r\n return (\r\n\r\n \r\n\r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom';\r\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\r\nimport jaLocale from 'date-fns/locale/ja';\r\nimport { ExtendedDateFnsUtils } from './components/MuiPickers/date-fns-utility';\r\n\r\nimport { ConstructionMachineMonitorPage, ReportPage, ConstructionMachineMasterPage, MasterPage, AccountPage, UploadPage } from './pages';\r\nimport { ThemeFrame } from './pages/Shared/ThemeFrame/ThemeFrame';\r\nimport { AuthorizeRouter } from './pages/Shared/AuthorizeRouter/AuthorizeRouter';\r\nimport './custom.css';\r\nimport { AppUrl } from './pages/Shared/app-url';\r\n\r\n\r\n/** App画面を表します。*/\r\nconst App = () => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n );\r\n\r\n}\r\n\r\nexport default App;\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { combineReducers, Reducer, AnyAction } from '@reduxjs/toolkit'\r\nimport { themeSlice } from './modules/slice/theme/theme-slice';\r\nimport { GlobalHeaderSlice } from './modules/slice/global-header/global-header-slice';\r\nimport { areaTypeSlice } from './modules/slice/area-type/area-type-slice';\r\nimport { AuthenticationSlice } from './modules/slice/authentication/authentication-slice';\r\n\r\n// 各Page\r\nimport { MachineMonitoringSlice } from './modules/slice/machine-monitoring/machine-monitoring-slice'\r\nimport { MachineStatusMonitoringSlice } from './modules/slice/machine-status-monitoring/machine-status-monitoring-slice';\r\nimport { MaintenanceRecordSlice } from './modules/slice/maintenance-record/maintenance-record-slice'\r\nimport { MachineErrorHistorySlice } from './modules/slice/machine-error-history/machine-error-history-slice';\r\nimport { DailyInspectionRecordSlice } from './modules/slice/daily-inspection-record/daily-inspection-record-slice';\r\nimport { WeeklyInspectionRecordSlice } from './modules/slice/weekly-inspection-record/weekly-inspection-record-slice';\r\nimport { CompletionInspectionRecordSlice } from './modules/slice/completion-inspection-record/completion-inspection-record-slice'\r\nimport { MachineOperationHistorySlice } from './modules/slice/machine-operation-history/machine-operation-history-slice';\r\nimport { StatusEditSlice } from './modules/slice/status-edit/status-edit-slice';\r\nimport { OtherReportSlice } from './modules/slice/other-report/other-report-slice';\r\nimport { MachineMasterSlice } from './modules/slice/machine/machine-slice';\r\nimport { ModelMasterSlice } from './modules/slice/model/model-slice';\r\nimport { ManufacturerMasterSlice } from './modules/slice/manufacturer/manufacturer-slice';\r\nimport { MethodMasterSlice } from './modules/slice/method/method-slice';\r\nimport { MaintenanceDivisionSlice } from './modules/slice/maintenance-division/maintenance-division-slice';\r\nimport { MaintenanceItemMasterSlice } from './modules/slice/maintenance-item/maintenance-item-slice';\r\nimport { RemarksMasterSlice } from './modules/slice/remarks/remarks-slice';\r\nimport { InspectionDivisionSlice } from './modules/slice/inspection-division/inspection-division-slice';\r\nimport { InspectionItemMasterSlice } from './modules/slice/inspection-item/inspection-item-slice';\r\nimport { UserMasterSlice } from './modules/slice/user/user-slice';\r\nimport { SigninSlice } from './modules/slice/signin/signin-slice';\r\nimport { FileManageSlice } from './modules/slice/file-manage/file-manage-slice';\r\n\r\n/** 各reducer を組合わせます。 */\r\nconst combinedReducer = combineReducers({\r\n // 認証済みユーザー情報\r\n authentication: AuthenticationSlice.reducer,\r\n // テーマ\r\n theme: themeSlice.reducer,\r\n //ヘッダー\r\n globalHeader: GlobalHeaderSlice.reducer,\r\n // エリア種別\r\n areaType: areaTypeSlice.reducer,\r\n\r\n // 各画面\r\n // サインイン画面\r\n signin: SigninSlice.reducer,\r\n // 施工機モニター(メイン画面)\r\n machineMonitoring: MachineMonitoringSlice.reducer,\r\n // 整備記録\r\n maintenanceRecord: MaintenanceRecordSlice.reducer,\r\n // 日常点検記録\r\n dailyInspectionRecord: DailyInspectionRecordSlice.reducer,\r\n // 週間月例点検記録\r\n weeklyInspectionRecord: WeeklyInspectionRecordSlice.reducer,\r\n // 現場完了時点検記録\r\n completionInspectionRecord: CompletionInspectionRecordSlice.reducer,\r\n // 施工機ステータス\r\n machineStatusMonitoring: MachineStatusMonitoringSlice.reducer,\r\n // 施工記録\r\n machineOperationHistory: MachineOperationHistorySlice.reducer,\r\n // ステータス編集\r\n statusEdit: StatusEditSlice.reducer,\r\n // アラート履歴\r\n machineErrorHistory: MachineErrorHistorySlice.reducer,\r\n // その他報告\r\n otherReport: OtherReportSlice.reducer,\r\n // ファイル管理\r\n fileManage: FileManageSlice.reducer,\r\n // ** マスタ系 **\r\n // 施工機マスタ\r\n machineMaster: MachineMasterSlice.reducer,\r\n // 型式マスタ\r\n modelMaster: ModelMasterSlice.reducer,\r\n // メーカーマスタ\r\n manufacturerMaster: ManufacturerMasterSlice.reducer,\r\n // 工法マスタ\r\n methodMaster: MethodMasterSlice.reducer,\r\n // 整備区分マスタ\r\n maintenanceDivisionMaster: MaintenanceDivisionSlice.reducer,\r\n // 整備項目マスタ\r\n maintenanceItemMaster: MaintenanceItemMasterSlice.reducer,\r\n // 特記事項マスタ\r\n remarksMaster: RemarksMasterSlice.reducer,\r\n // 点検区分マスタ\r\n inspectionDivisionMaster: InspectionDivisionSlice.reducer,\r\n // 点検項目マスタ\r\n inspectionItemMaster: InspectionItemMasterSlice.reducer,\r\n // ユーザーマスタ\r\n userMaster: UserMasterSlice.reducer,\r\n});\r\n\r\nexport type RootState = ReturnType\r\n\r\n/**\r\n * アプリの Reducer を表します。\r\n * @param state Stateを指定します。\r\n * @param action アクションを指定します。\r\n */\r\nexport const rootReducer: Reducer = (state: RootState, action: AnyAction) => {\r\n\r\n // サインアウト アクション時に Store の情報を全てリセットします。\r\n // 参考:https://stackoverflow.com/questions/35622588/how-to-reset-the-state-of-a-redux-store\r\n if (action.type === \"Authentication/userSignOut\") {\r\n state = {} as RootState;\r\n }\r\n\r\n return combinedReducer(state, action);\r\n};\r\n","import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'\r\nimport { rootReducer } from './rootReducer'\r\n\r\nconst store = configureStore({\r\n reducer: rootReducer,\r\n middleware: [...getDefaultMiddleware()],\r\n devTools: process.env.NODE_ENV !== 'production',\r\n})\r\n\r\nexport type AppDispatch = typeof store.dispatch\r\n\r\nexport default store\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\n//import \"@grapecity/ar-viewer-ja/dist/jsViewer.min.js\";\r\n//import \"@grapecity/ar-viewer-ja/dist/jsViewer.min.css\";\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport { Provider } from 'react-redux'\r\nimport store from './store'\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n"],"sourceRoot":""}