@things-factory/ops-master 10.1.248 → 10.1.250
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/bootstrap.d.ts +19 -0
- package/dist-client/bootstrap.js +66 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/index.d.ts +17 -0
- package/dist-client/index.js +21 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/master-change-approval.d.ts +14 -0
- package/dist-client/master-change-approval.js +36 -0
- package/dist-client/master-change-approval.js.map +1 -0
- package/dist-client/master-change-policy-axes.d.ts +37 -0
- package/dist-client/master-change-policy-axes.js +29 -0
- package/dist-client/master-change-policy-axes.js.map +1 -0
- package/dist-client/master-change-policy-panel.d.ts +59 -0
- package/dist-client/master-change-policy-panel.js +454 -0
- package/dist-client/master-change-policy-panel.js.map +1 -0
- package/dist-client/master-change-providers.d.ts +4 -0
- package/dist-client/master-change-providers.js +91 -0
- package/dist-client/master-change-providers.js.map +1 -0
- package/dist-client/pages/master/applied-when-dialog.d.ts +48 -0
- package/dist-client/pages/master/applied-when-dialog.js +137 -0
- package/dist-client/pages/master/applied-when-dialog.js.map +1 -0
- package/dist-client/pages/master/assignment-fields.d.ts +27 -0
- package/dist-client/pages/master/assignment-fields.js +62 -0
- package/dist-client/pages/master/assignment-fields.js.map +1 -0
- package/dist-client/pages/master/equipment-class.d.ts +12 -0
- package/dist-client/pages/master/equipment-class.js +42 -0
- package/dist-client/pages/master/equipment-class.js.map +1 -0
- package/dist-client/pages/master/equipment.d.ts +12 -0
- package/dist-client/pages/master/equipment.js +58 -0
- package/dist-client/pages/master/equipment.js.map +1 -0
- package/dist-client/pages/master/grist-iso-duration.d.ts +20 -0
- package/dist-client/pages/master/grist-iso-duration.js +70 -0
- package/dist-client/pages/master/grist-iso-duration.js.map +1 -0
- package/dist-client/pages/master/grist-reference.d.ts +91 -0
- package/dist-client/pages/master/grist-reference.js +419 -0
- package/dist-client/pages/master/grist-reference.js.map +1 -0
- package/dist-client/pages/master/import-rows.d.ts +35 -0
- package/dist-client/pages/master/import-rows.js +66 -0
- package/dist-client/pages/master/import-rows.js.map +1 -0
- package/dist-client/pages/master/iso-duration.d.ts +34 -0
- package/dist-client/pages/master/iso-duration.js +76 -0
- package/dist-client/pages/master/iso-duration.js.map +1 -0
- package/dist-client/pages/master/master-options.d.ts +40 -0
- package/dist-client/pages/master/master-options.js +54 -0
- package/dist-client/pages/master/master-options.js.map +1 -0
- package/dist-client/pages/master/master-page-base.d.ts +369 -0
- package/dist-client/pages/master/master-page-base.js +657 -0
- package/dist-client/pages/master/master-page-base.js.map +1 -0
- package/dist-client/pages/master/material-class.d.ts +12 -0
- package/dist-client/pages/master/material-class.js +42 -0
- package/dist-client/pages/master/material-class.js.map +1 -0
- package/dist-client/pages/master/material-definition.d.ts +5 -0
- package/dist-client/pages/master/material-definition.js +14 -0
- package/dist-client/pages/master/material-definition.js.map +1 -0
- package/dist-client/pages/master/material-revision-fields.d.ts +2 -0
- package/dist-client/pages/master/material-revision-fields.js +43 -0
- package/dist-client/pages/master/material-revision-fields.js.map +1 -0
- package/dist-client/pages/master/operation-definition.d.ts +12 -0
- package/dist-client/pages/master/operation-definition.js +49 -0
- package/dist-client/pages/master/operation-definition.js.map +1 -0
- package/dist-client/pages/master/operational-location.d.ts +84 -0
- package/dist-client/pages/master/operational-location.js +432 -0
- package/dist-client/pages/master/operational-location.js.map +1 -0
- package/dist-client/pages/master/person.d.ts +12 -0
- package/dist-client/pages/master/person.js +41 -0
- package/dist-client/pages/master/person.js.map +1 -0
- package/dist-client/pages/master/personnel-class.d.ts +12 -0
- package/dist-client/pages/master/personnel-class.js +43 -0
- package/dist-client/pages/master/personnel-class.js.map +1 -0
- package/dist-client/pages/master/physical-asset-class.d.ts +12 -0
- package/dist-client/pages/master/physical-asset-class.js +40 -0
- package/dist-client/pages/master/physical-asset-class.js.map +1 -0
- package/dist-client/pages/master/physical-asset.d.ts +12 -0
- package/dist-client/pages/master/physical-asset.js +41 -0
- package/dist-client/pages/master/physical-asset.js.map +1 -0
- package/dist-client/pages/master/recipe-definition.d.ts +5 -0
- package/dist-client/pages/master/recipe-definition.js +14 -0
- package/dist-client/pages/master/recipe-definition.js.map +1 -0
- package/dist-client/pages/master/reference-targets.d.ts +42 -0
- package/dist-client/pages/master/reference-targets.js +82 -0
- package/dist-client/pages/master/reference-targets.js.map +1 -0
- package/dist-client/pages/master/revision-comparison.d.ts +49 -0
- package/dist-client/pages/master/revision-comparison.js +560 -0
- package/dist-client/pages/master/revision-comparison.js.map +1 -0
- package/dist-client/pages/master/revision-view.d.ts +34 -0
- package/dist-client/pages/master/revision-view.js +145 -0
- package/dist-client/pages/master/revision-view.js.map +1 -0
- package/dist-client/pages/master/revision-workspace.d.ts +50 -0
- package/dist-client/pages/master/revision-workspace.js +763 -0
- package/dist-client/pages/master/revision-workspace.js.map +1 -0
- package/dist-client/pages/master/route-definition.d.ts +19 -0
- package/dist-client/pages/master/route-definition.js +40 -0
- package/dist-client/pages/master/route-definition.js.map +1 -0
- package/dist-client/pages/master/stop-reason.d.ts +12 -0
- package/dist-client/pages/master/stop-reason.js +48 -0
- package/dist-client/pages/master/stop-reason.js.map +1 -0
- package/dist-client/pages/master/test-specification.d.ts +5 -0
- package/dist-client/pages/master/test-specification.js +14 -0
- package/dist-client/pages/master/test-specification.js.map +1 -0
- package/dist-client/pages/master-axes.d.ts +24 -0
- package/dist-client/pages/master-axes.js +39 -0
- package/dist-client/pages/master-axes.js.map +1 -0
- package/dist-client/route.d.ts +1 -0
- package/dist-client/route.js +81 -0
- package/dist-client/route.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/index.d.ts +1 -0
- package/dist-server/index.js +19 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/service/ai-entry/master-entry-rules.d.ts +175 -0
- package/dist-server/service/ai-entry/master-entry-rules.js +302 -0
- package/dist-server/service/ai-entry/master-entry-rules.js.map +1 -0
- package/dist-server/service/ai-entry/master-entry-targets.d.ts +23 -0
- package/dist-server/service/ai-entry/master-entry-targets.js +293 -0
- package/dist-server/service/ai-entry/master-entry-targets.js.map +1 -0
- package/dist-server/service/approval-route.d.ts +37 -0
- package/dist-server/service/approval-route.js +34 -0
- package/dist-server/service/approval-route.js.map +1 -0
- package/dist-server/service/asset/asset-lifecycle.d.ts +106 -0
- package/dist-server/service/asset/asset-lifecycle.js +126 -0
- package/dist-server/service/asset/asset-lifecycle.js.map +1 -0
- package/dist-server/service/asset/asset-master-resolver.d.ts +53 -0
- package/dist-server/service/asset/asset-master-resolver.js +185 -0
- package/dist-server/service/asset/asset-master-resolver.js.map +1 -0
- package/dist-server/service/asset/asset-master.d.ts +21 -0
- package/dist-server/service/asset/asset-master.js +25 -0
- package/dist-server/service/asset/asset-master.js.map +1 -0
- package/dist-server/service/asset/asset-query.d.ts +16 -0
- package/dist-server/service/asset/asset-query.js +72 -0
- package/dist-server/service/asset/asset-query.js.map +1 -0
- package/dist-server/service/asset/index.d.ts +6 -0
- package/dist-server/service/asset/index.js +10 -0
- package/dist-server/service/asset/index.js.map +1 -0
- package/dist-server/service/asset/physical-asset-class.d.ts +34 -0
- package/dist-server/service/asset/physical-asset-class.js +104 -0
- package/dist-server/service/asset/physical-asset-class.js.map +1 -0
- package/dist-server/service/asset/physical-asset.d.ts +66 -0
- package/dist-server/service/asset/physical-asset.js +123 -0
- package/dist-server/service/asset/physical-asset.js.map +1 -0
- package/dist-server/service/assignment/applied-when.d.ts +24 -0
- package/dist-server/service/assignment/applied-when.js +16 -0
- package/dist-server/service/assignment/applied-when.js.map +1 -0
- package/dist-server/service/assignment/assignment-history.d.ts +92 -0
- package/dist-server/service/assignment/assignment-history.js +289 -0
- package/dist-server/service/assignment/assignment-history.js.map +1 -0
- package/dist-server/service/assignment/assignment-write.d.ts +42 -0
- package/dist-server/service/assignment/assignment-write.js +101 -0
- package/dist-server/service/assignment/assignment-write.js.map +1 -0
- package/dist-server/service/assignment/master-value-claim.d.ts +135 -0
- package/dist-server/service/assignment/master-value-claim.js +174 -0
- package/dist-server/service/assignment/master-value-claim.js.map +1 -0
- package/dist-server/service/equipment/equipment-class.d.ts +34 -0
- package/dist-server/service/equipment/equipment-class.js +104 -0
- package/dist-server/service/equipment/equipment-class.js.map +1 -0
- package/dist-server/service/equipment/equipment-master-resolver.d.ts +77 -0
- package/dist-server/service/equipment/equipment-master-resolver.js +266 -0
- package/dist-server/service/equipment/equipment-master-resolver.js.map +1 -0
- package/dist-server/service/equipment/equipment-master.d.ts +30 -0
- package/dist-server/service/equipment/equipment-master.js +53 -0
- package/dist-server/service/equipment/equipment-master.js.map +1 -0
- package/dist-server/service/equipment/equipment-query.d.ts +16 -0
- package/dist-server/service/equipment/equipment-query.js +72 -0
- package/dist-server/service/equipment/equipment-query.js.map +1 -0
- package/dist-server/service/equipment/equipment.d.ts +71 -0
- package/dist-server/service/equipment/equipment.js +138 -0
- package/dist-server/service/equipment/equipment.js.map +1 -0
- package/dist-server/service/equipment/index.d.ts +8 -0
- package/dist-server/service/equipment/index.js +12 -0
- package/dist-server/service/equipment/index.js.map +1 -0
- package/dist-server/service/equipment/state-period-rules.d.ts +95 -0
- package/dist-server/service/equipment/state-period-rules.js +122 -0
- package/dist-server/service/equipment/state-period-rules.js.map +1 -0
- package/dist-server/service/equipment/stop-reason-query.d.ts +11 -0
- package/dist-server/service/equipment/stop-reason-query.js +39 -0
- package/dist-server/service/equipment/stop-reason-query.js.map +1 -0
- package/dist-server/service/equipment/stop-reason.d.ts +58 -0
- package/dist-server/service/equipment/stop-reason.js +114 -0
- package/dist-server/service/equipment/stop-reason.js.map +1 -0
- package/dist-server/service/index.d.ts +82 -0
- package/dist-server/service/index.js +145 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/location/index.d.ts +5 -0
- package/dist-server/service/location/index.js +9 -0
- package/dist-server/service/location/index.js.map +1 -0
- package/dist-server/service/location/location-master-resolver.d.ts +60 -0
- package/dist-server/service/location/location-master-resolver.js +313 -0
- package/dist-server/service/location/location-master-resolver.js.map +1 -0
- package/dist-server/service/location/location-master.d.ts +26 -0
- package/dist-server/service/location/location-master.js +28 -0
- package/dist-server/service/location/location-master.js.map +1 -0
- package/dist-server/service/location/location-query.d.ts +15 -0
- package/dist-server/service/location/location-query.js +56 -0
- package/dist-server/service/location/location-query.js.map +1 -0
- package/dist-server/service/location/operational-location.d.ts +116 -0
- package/dist-server/service/location/operational-location.js +157 -0
- package/dist-server/service/location/operational-location.js.map +1 -0
- package/dist-server/service/master-axis.d.ts +40 -0
- package/dist-server/service/master-axis.js +57 -0
- package/dist-server/service/master-axis.js.map +1 -0
- package/dist-server/service/master-change-approval/approval-input.d.ts +17 -0
- package/dist-server/service/master-change-approval/approval-input.js +35 -0
- package/dist-server/service/master-change-approval/approval-input.js.map +1 -0
- package/dist-server/service/master-change-approval/builtin-axes.d.ts +4 -0
- package/dist-server/service/master-change-approval/builtin-axes.js +96 -0
- package/dist-server/service/master-change-approval/builtin-axes.js.map +1 -0
- package/dist-server/service/master-change-approval/index.d.ts +14 -0
- package/dist-server/service/master-change-approval/index.js +37 -0
- package/dist-server/service/master-change-approval/index.js.map +1 -0
- package/dist-server/service/master-change-approval/master-change-axis.d.ts +54 -0
- package/dist-server/service/master-change-approval/master-change-axis.js +17 -0
- package/dist-server/service/master-change-approval/master-change-axis.js.map +1 -0
- package/dist-server/service/master-change-approval/master-change-flow.d.ts +65 -0
- package/dist-server/service/master-change-approval/master-change-flow.js +125 -0
- package/dist-server/service/master-change-approval/master-change-flow.js.map +1 -0
- package/dist-server/service/master-change-approval/master-change-resolver.d.ts +18 -0
- package/dist-server/service/master-change-approval/master-change-resolver.js +58 -0
- package/dist-server/service/master-change-approval/master-change-resolver.js.map +1 -0
- package/dist-server/service/master-change-policy.d.ts +122 -0
- package/dist-server/service/master-change-policy.js +304 -0
- package/dist-server/service/master-change-policy.js.map +1 -0
- package/dist-server/service/master-conformance-resolver.d.ts +34 -0
- package/dist-server/service/master-conformance-resolver.js +153 -0
- package/dist-server/service/master-conformance-resolver.js.map +1 -0
- package/dist-server/service/master-conformance.d.ts +80 -0
- package/dist-server/service/master-conformance.js +266 -0
- package/dist-server/service/master-conformance.js.map +1 -0
- package/dist-server/service/master-crud.d.ts +55 -0
- package/dist-server/service/master-crud.js +93 -0
- package/dist-server/service/master-crud.js.map +1 -0
- package/dist-server/service/master-list.d.ts +12 -0
- package/dist-server/service/master-list.js +30 -0
- package/dist-server/service/master-list.js.map +1 -0
- package/dist-server/service/master-page-query.d.ts +33 -0
- package/dist-server/service/master-page-query.js +55 -0
- package/dist-server/service/master-page-query.js.map +1 -0
- package/dist-server/service/master-page.d.ts +85 -0
- package/dist-server/service/master-page.js +104 -0
- package/dist-server/service/master-page.js.map +1 -0
- package/dist-server/service/material/index.d.ts +7 -0
- package/dist-server/service/material/index.js +12 -0
- package/dist-server/service/material/index.js.map +1 -0
- package/dist-server/service/material/material-axis-status.d.ts +8 -0
- package/dist-server/service/material/material-axis-status.js +19 -0
- package/dist-server/service/material/material-axis-status.js.map +1 -0
- package/dist-server/service/material/material-class.d.ts +34 -0
- package/dist-server/service/material/material-class.js +104 -0
- package/dist-server/service/material/material-class.js.map +1 -0
- package/dist-server/service/material/material-definition.d.ts +45 -0
- package/dist-server/service/material/material-definition.js +125 -0
- package/dist-server/service/material/material-definition.js.map +1 -0
- package/dist-server/service/material/material-effective-list.d.ts +39 -0
- package/dist-server/service/material/material-effective-list.js +54 -0
- package/dist-server/service/material/material-effective-list.js.map +1 -0
- package/dist-server/service/material/material-master-resolver.d.ts +106 -0
- package/dist-server/service/material/material-master-resolver.js +351 -0
- package/dist-server/service/material/material-master-resolver.js.map +1 -0
- package/dist-server/service/material/material-master.d.ts +9 -0
- package/dist-server/service/material/material-master.js +24 -0
- package/dist-server/service/material/material-master.js.map +1 -0
- package/dist-server/service/material/material-query.d.ts +16 -0
- package/dist-server/service/material/material-query.js +79 -0
- package/dist-server/service/material/material-query.js.map +1 -0
- package/dist-server/service/material/material-revision-content.d.ts +10 -0
- package/dist-server/service/material/material-revision-content.js +92 -0
- package/dist-server/service/material/material-revision-content.js.map +1 -0
- package/dist-server/service/material/material-revision-resolver.d.ts +60 -0
- package/dist-server/service/material/material-revision-resolver.js +96 -0
- package/dist-server/service/material/material-revision-resolver.js.map +1 -0
- package/dist-server/service/material/material-revision-service.d.ts +179 -0
- package/dist-server/service/material/material-revision-service.js +687 -0
- package/dist-server/service/material/material-revision-service.js.map +1 -0
- package/dist-server/service/material/material-revision.d.ts +86 -0
- package/dist-server/service/material/material-revision.js +339 -0
- package/dist-server/service/material/material-revision.js.map +1 -0
- package/dist-server/service/material/recipe-index.d.ts +23 -0
- package/dist-server/service/material/recipe-index.js +44 -0
- package/dist-server/service/material/recipe-index.js.map +1 -0
- package/dist-server/service/operation/index.d.ts +6 -0
- package/dist-server/service/operation/index.js +10 -0
- package/dist-server/service/operation/index.js.map +1 -0
- package/dist-server/service/operation/operation-definition.d.ts +52 -0
- package/dist-server/service/operation/operation-definition.js +143 -0
- package/dist-server/service/operation/operation-definition.js.map +1 -0
- package/dist-server/service/operation/operation-master-resolver.d.ts +52 -0
- package/dist-server/service/operation/operation-master-resolver.js +187 -0
- package/dist-server/service/operation/operation-master-resolver.js.map +1 -0
- package/dist-server/service/operation/operation-master.d.ts +21 -0
- package/dist-server/service/operation/operation-master.js +28 -0
- package/dist-server/service/operation/operation-master.js.map +1 -0
- package/dist-server/service/operation/operation-query.d.ts +15 -0
- package/dist-server/service/operation/operation-query.js +56 -0
- package/dist-server/service/operation/operation-query.js.map +1 -0
- package/dist-server/service/operation/operation-readiness-resolver.d.ts +39 -0
- package/dist-server/service/operation/operation-readiness-resolver.js +111 -0
- package/dist-server/service/operation/operation-readiness-resolver.js.map +1 -0
- package/dist-server/service/operation/operation-readiness.d.ts +34 -0
- package/dist-server/service/operation/operation-readiness.js +133 -0
- package/dist-server/service/operation/operation-readiness.js.map +1 -0
- package/dist-server/service/personnel/index.d.ts +6 -0
- package/dist-server/service/personnel/index.js +10 -0
- package/dist-server/service/personnel/index.js.map +1 -0
- package/dist-server/service/personnel/person.d.ts +51 -0
- package/dist-server/service/personnel/person.js +119 -0
- package/dist-server/service/personnel/person.js.map +1 -0
- package/dist-server/service/personnel/personnel-class-readiness.d.ts +22 -0
- package/dist-server/service/personnel/personnel-class-readiness.js +98 -0
- package/dist-server/service/personnel/personnel-class-readiness.js.map +1 -0
- package/dist-server/service/personnel/personnel-class.d.ts +54 -0
- package/dist-server/service/personnel/personnel-class.js +114 -0
- package/dist-server/service/personnel/personnel-class.js.map +1 -0
- package/dist-server/service/personnel/personnel-master-resolver.d.ts +53 -0
- package/dist-server/service/personnel/personnel-master-resolver.js +187 -0
- package/dist-server/service/personnel/personnel-master-resolver.js.map +1 -0
- package/dist-server/service/personnel/personnel-master.d.ts +39 -0
- package/dist-server/service/personnel/personnel-master.js +34 -0
- package/dist-server/service/personnel/personnel-master.js.map +1 -0
- package/dist-server/service/personnel/personnel-query.d.ts +29 -0
- package/dist-server/service/personnel/personnel-query.js +79 -0
- package/dist-server/service/personnel/personnel-query.js.map +1 -0
- package/dist-server/service/personnel/qualification.d.ts +104 -0
- package/dist-server/service/personnel/qualification.js +147 -0
- package/dist-server/service/personnel/qualification.js.map +1 -0
- package/dist-server/service/quality/index.d.ts +4 -0
- package/dist-server/service/quality/index.js +8 -0
- package/dist-server/service/quality/index.js.map +1 -0
- package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +12 -0
- package/dist-server/service/quality/nonconformance-cause-resolver.js +60 -0
- package/dist-server/service/quality/nonconformance-cause-resolver.js.map +1 -0
- package/dist-server/service/quality/nonconformance-cause.d.ts +20 -0
- package/dist-server/service/quality/nonconformance-cause.js +90 -0
- package/dist-server/service/quality/nonconformance-cause.js.map +1 -0
- package/dist-server/service/recipe/index.d.ts +10 -0
- package/dist-server/service/recipe/index.js +16 -0
- package/dist-server/service/recipe/index.js.map +1 -0
- package/dist-server/service/recipe/recipe-definition.d.ts +75 -0
- package/dist-server/service/recipe/recipe-definition.js +143 -0
- package/dist-server/service/recipe/recipe-definition.js.map +1 -0
- package/dist-server/service/recipe/recipe-effective-list.d.ts +49 -0
- package/dist-server/service/recipe/recipe-effective-list.js +96 -0
- package/dist-server/service/recipe/recipe-effective-list.js.map +1 -0
- package/dist-server/service/recipe/recipe-master-resolver.d.ts +28 -0
- package/dist-server/service/recipe/recipe-master-resolver.js +128 -0
- package/dist-server/service/recipe/recipe-master-resolver.js.map +1 -0
- package/dist-server/service/recipe/recipe-master.d.ts +37 -0
- package/dist-server/service/recipe/recipe-master.js +47 -0
- package/dist-server/service/recipe/recipe-master.js.map +1 -0
- package/dist-server/service/recipe/recipe-query.d.ts +21 -0
- package/dist-server/service/recipe/recipe-query.js +82 -0
- package/dist-server/service/recipe/recipe-query.js.map +1 -0
- package/dist-server/service/recipe/recipe-revision-content.d.ts +32 -0
- package/dist-server/service/recipe/recipe-revision-content.js +70 -0
- package/dist-server/service/recipe/recipe-revision-content.js.map +1 -0
- package/dist-server/service/recipe/recipe-revision-line.d.ts +30 -0
- package/dist-server/service/recipe/recipe-revision-line.js +95 -0
- package/dist-server/service/recipe/recipe-revision-line.js.map +1 -0
- package/dist-server/service/recipe/recipe-revision-resolver.d.ts +65 -0
- package/dist-server/service/recipe/recipe-revision-resolver.js +96 -0
- package/dist-server/service/recipe/recipe-revision-resolver.js.map +1 -0
- package/dist-server/service/recipe/recipe-revision-service.d.ts +183 -0
- package/dist-server/service/recipe/recipe-revision-service.js +754 -0
- package/dist-server/service/recipe/recipe-revision-service.js.map +1 -0
- package/dist-server/service/recipe/recipe-revision.d.ts +102 -0
- package/dist-server/service/recipe/recipe-revision.js +373 -0
- package/dist-server/service/recipe/recipe-revision.js.map +1 -0
- package/dist-server/service/recipe/route-definition.d.ts +51 -0
- package/dist-server/service/recipe/route-definition.js +114 -0
- package/dist-server/service/recipe/route-definition.js.map +1 -0
- package/dist-server/service/resource/class-lineage.d.ts +46 -0
- package/dist-server/service/resource/class-lineage.js +80 -0
- package/dist-server/service/resource/class-lineage.js.map +1 -0
- package/dist-server/service/resource/class-members.d.ts +36 -0
- package/dist-server/service/resource/class-members.js +59 -0
- package/dist-server/service/resource/class-members.js.map +1 -0
- package/dist-server/service/resource/referrers.d.ts +54 -0
- package/dist-server/service/resource/referrers.js +99 -0
- package/dist-server/service/resource/referrers.js.map +1 -0
- package/dist-server/service/resource/resource-class.d.ts +25 -0
- package/dist-server/service/resource/resource-class.js +29 -0
- package/dist-server/service/resource/resource-class.js.map +1 -0
- package/dist-server/service/revision-baseline.d.ts +71 -0
- package/dist-server/service/revision-baseline.js +87 -0
- package/dist-server/service/revision-baseline.js.map +1 -0
- package/dist-server/service/row-lock.d.ts +22 -0
- package/dist-server/service/row-lock.js +31 -0
- package/dist-server/service/row-lock.js.map +1 -0
- package/dist-server/service/status/axis-stamp.d.ts +16 -0
- package/dist-server/service/status/axis-stamp.js +22 -0
- package/dist-server/service/status/axis-stamp.js.map +1 -0
- package/dist-server/service/status/index.d.ts +3 -0
- package/dist-server/service/status/index.js +7 -0
- package/dist-server/service/status/index.js.map +1 -0
- package/dist-server/service/status/master-status.d.ts +38 -0
- package/dist-server/service/status/master-status.js +129 -0
- package/dist-server/service/status/master-status.js.map +1 -0
- package/dist-server/service/test-spec/criteria-check.d.ts +53 -0
- package/dist-server/service/test-spec/criteria-check.js +142 -0
- package/dist-server/service/test-spec/criteria-check.js.map +1 -0
- package/dist-server/service/test-spec/criteria-rows.d.ts +89 -0
- package/dist-server/service/test-spec/criteria-rows.js +139 -0
- package/dist-server/service/test-spec/criteria-rows.js.map +1 -0
- package/dist-server/service/test-spec/index.d.ts +6 -0
- package/dist-server/service/test-spec/index.js +11 -0
- package/dist-server/service/test-spec/index.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-effective-list.d.ts +34 -0
- package/dist-server/service/test-spec/test-spec-effective-list.js +42 -0
- package/dist-server/service/test-spec/test-spec-effective-list.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +44 -0
- package/dist-server/service/test-spec/test-spec-master-resolver.js +144 -0
- package/dist-server/service/test-spec/test-spec-master-resolver.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-master.d.ts +6 -0
- package/dist-server/service/test-spec/test-spec-master.js +18 -0
- package/dist-server/service/test-spec/test-spec-master.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-query.d.ts +15 -0
- package/dist-server/service/test-spec/test-spec-query.js +61 -0
- package/dist-server/service/test-spec/test-spec-query.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +59 -0
- package/dist-server/service/test-spec/test-spec-revision-resolver.js +96 -0
- package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-revision-service.d.ts +178 -0
- package/dist-server/service/test-spec/test-spec-revision-service.js +685 -0
- package/dist-server/service/test-spec/test-spec-revision-service.js.map +1 -0
- package/dist-server/service/test-spec/test-spec-revision.d.ts +86 -0
- package/dist-server/service/test-spec/test-spec-revision.js +334 -0
- package/dist-server/service/test-spec/test-spec-revision.js.map +1 -0
- package/dist-server/service/test-spec/test-specification.d.ts +47 -0
- package/dist-server/service/test-spec/test-specification.js +119 -0
- package/dist-server/service/test-spec/test-specification.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import '@material/web/button/filled-button.js';
|
|
3
|
+
import '@material/web/button/text-button.js';
|
|
4
|
+
import '@operato/popup/ox-popup-actions.js';
|
|
5
|
+
import { CLAIMED_FIELDS } from './assignment-fields.js';
|
|
6
|
+
/**
|
|
7
|
+
* **언제부터 그러한가를 묻는 자리.**
|
|
8
|
+
*
|
|
9
|
+
* ── 왜 날짜 칸 하나가 아닌가 ───────────────────────────────────────────────
|
|
10
|
+
* 그리드에 날짜 열을 하나 더하면 사람은 그것을 **또 하나의 값**으로 읽는다. 이 셋(자리 배정 · 근무조
|
|
11
|
+
* 선언 · 부모 관계)은 값이 아니라 **언제부터 그렇게 볼 것인가**를 함께 정하는 일이고, 과거를 적으면
|
|
12
|
+
* **지연 기록인지 정정인지**까지 갈라야 한다. 그래서 저장 직전에 한 번 묻는다.
|
|
13
|
+
*
|
|
14
|
+
* ```
|
|
15
|
+
* 바뀌기 전 → 바뀐 뒤
|
|
16
|
+
* 적용 시작 기본값 「지금부터」
|
|
17
|
+
* 과거 시각이면 지연 기록인가 이미 적은 것의 정정인가
|
|
18
|
+
* 미래 시각이면 지금 값은 그대로이고 변경이 예약된다고 알린다
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* ⚠ **기록 시각은 안 묻는다.** 사람이 넣으면 「언제 알았나」를 사람이 정하게 된다 — 서버가 붙인다.
|
|
22
|
+
*/
|
|
23
|
+
export interface AppliedAnswer {
|
|
24
|
+
at?: string;
|
|
25
|
+
kind?: 'change' | 'correction';
|
|
26
|
+
until?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AssignmentChange {
|
|
29
|
+
rowName: string;
|
|
30
|
+
field: string;
|
|
31
|
+
before: string;
|
|
32
|
+
after: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class AppliedWhenDialog extends LitElement {
|
|
35
|
+
static styles: import("lit").CSSResult;
|
|
36
|
+
changes: AssignmentChange[];
|
|
37
|
+
onAnswer?: (answer: AppliedAnswer) => void;
|
|
38
|
+
onCancel?: () => void;
|
|
39
|
+
private at;
|
|
40
|
+
private kind;
|
|
41
|
+
private until;
|
|
42
|
+
/** 안 적으면 지금부터다 — 그 기본값이 곧 「지금부터」라는 주장이다. */
|
|
43
|
+
private get when();
|
|
44
|
+
private get past();
|
|
45
|
+
private get future();
|
|
46
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
47
|
+
}
|
|
48
|
+
export { CLAIMED_FIELDS };
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { LitElement, css, html } from 'lit';
|
|
3
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
|
+
import '@material/web/button/filled-button.js';
|
|
5
|
+
import '@material/web/button/text-button.js';
|
|
6
|
+
import '@operato/popup/ox-popup-actions.js';
|
|
7
|
+
import { i18next } from '@operato/i18n';
|
|
8
|
+
import { CLAIMED_FIELDS } from './assignment-fields.js';
|
|
9
|
+
let AppliedWhenDialog = class AppliedWhenDialog extends LitElement {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.changes = [];
|
|
13
|
+
this.at = '';
|
|
14
|
+
this.kind = 'change';
|
|
15
|
+
this.until = '';
|
|
16
|
+
}
|
|
17
|
+
static { this.styles = css `
|
|
18
|
+
:host {
|
|
19
|
+
display: block;
|
|
20
|
+
padding: var(--spacing-medium, 12px);
|
|
21
|
+
}
|
|
22
|
+
.what {
|
|
23
|
+
display: grid;
|
|
24
|
+
grid-template-columns: auto 1fr;
|
|
25
|
+
gap: var(--spacing-tiny, 4px) var(--spacing-small, 8px);
|
|
26
|
+
margin-bottom: var(--spacing-medium, 12px);
|
|
27
|
+
}
|
|
28
|
+
.what span {
|
|
29
|
+
color: var(--md-sys-color-on-surface-variant);
|
|
30
|
+
}
|
|
31
|
+
.note {
|
|
32
|
+
color: var(--md-sys-color-on-surface-variant);
|
|
33
|
+
margin-top: var(--spacing-small, 8px);
|
|
34
|
+
}
|
|
35
|
+
`; }
|
|
36
|
+
/** 안 적으면 지금부터다 — 그 기본값이 곧 「지금부터」라는 주장이다. */
|
|
37
|
+
get when() {
|
|
38
|
+
return this.at ? new Date(this.at).getTime() : Date.now();
|
|
39
|
+
}
|
|
40
|
+
get past() {
|
|
41
|
+
return this.when < Date.now() - 60000;
|
|
42
|
+
}
|
|
43
|
+
get future() {
|
|
44
|
+
return this.when > Date.now() + 60000;
|
|
45
|
+
}
|
|
46
|
+
render() {
|
|
47
|
+
return html `
|
|
48
|
+
<div class="what">
|
|
49
|
+
${this.changes.map(one => html `
|
|
50
|
+
<span>${one.rowName} · ${labelOf(one.field)}</span>
|
|
51
|
+
<div>${one.before || i18next.t('text.none')} → <b>${one.after || i18next.t('text.none')}</b></div>
|
|
52
|
+
`)}
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<label>
|
|
56
|
+
${i18next.t('label.applied-from')}
|
|
57
|
+
<input
|
|
58
|
+
type="datetime-local"
|
|
59
|
+
.value=${this.at}
|
|
60
|
+
@change=${(e) => (this.at = e.target.value)}
|
|
61
|
+
placeholder=${i18next.t('text.from-now')}
|
|
62
|
+
/>
|
|
63
|
+
</label>
|
|
64
|
+
|
|
65
|
+
${this.past
|
|
66
|
+
? html `
|
|
67
|
+
<div>
|
|
68
|
+
<label>
|
|
69
|
+
<input type="radio" name="kind" ?checked=${this.kind === 'change'} @change=${() => (this.kind = 'change')} />
|
|
70
|
+
${i18next.t('label.late-record')}
|
|
71
|
+
</label>
|
|
72
|
+
<label>
|
|
73
|
+
<input type="radio" name="kind" ?checked=${this.kind === 'correction'} @change=${() => (this.kind = 'correction')} />
|
|
74
|
+
${i18next.t('label.correct-what-was-recorded')}
|
|
75
|
+
</label>
|
|
76
|
+
${this.kind === 'correction'
|
|
77
|
+
? html `
|
|
78
|
+
<label>
|
|
79
|
+
${i18next.t('label.applied-until')}
|
|
80
|
+
<input type="datetime-local" .value=${this.until} @change=${(e) => (this.until = e.target.value)} />
|
|
81
|
+
</label>
|
|
82
|
+
`
|
|
83
|
+
: ''}
|
|
84
|
+
</div>
|
|
85
|
+
`
|
|
86
|
+
: ''}
|
|
87
|
+
${this.future ? html `<div class="note">${i18next.t('text.change-is-scheduled')}</div>` : ''}
|
|
88
|
+
|
|
89
|
+
<ox-popup-actions>
|
|
90
|
+
<md-text-button slot="cancel" @click=${() => this.onCancel?.()}>${i18next.t('button.cancel')}</md-text-button>
|
|
91
|
+
<md-filled-button
|
|
92
|
+
slot="confirm"
|
|
93
|
+
@click=${() => this.onAnswer?.({
|
|
94
|
+
...(this.at ? { at: new Date(this.at).toISOString() } : {}),
|
|
95
|
+
...(this.past ? { kind: this.kind } : {}),
|
|
96
|
+
...(this.past && this.kind === 'correction' && this.until ? { until: new Date(this.until).toISOString() } : {})
|
|
97
|
+
})}
|
|
98
|
+
>
|
|
99
|
+
${i18next.t('button.save')}
|
|
100
|
+
</md-filled-button>
|
|
101
|
+
</ox-popup-actions>
|
|
102
|
+
`;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
__decorate([
|
|
106
|
+
property({ type: Array }),
|
|
107
|
+
__metadata("design:type", Array)
|
|
108
|
+
], AppliedWhenDialog.prototype, "changes", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
property({ type: Object }),
|
|
111
|
+
__metadata("design:type", Function)
|
|
112
|
+
], AppliedWhenDialog.prototype, "onAnswer", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
property({ type: Object }),
|
|
115
|
+
__metadata("design:type", Function)
|
|
116
|
+
], AppliedWhenDialog.prototype, "onCancel", void 0);
|
|
117
|
+
__decorate([
|
|
118
|
+
state(),
|
|
119
|
+
__metadata("design:type", Object)
|
|
120
|
+
], AppliedWhenDialog.prototype, "at", void 0);
|
|
121
|
+
__decorate([
|
|
122
|
+
state(),
|
|
123
|
+
__metadata("design:type", String)
|
|
124
|
+
], AppliedWhenDialog.prototype, "kind", void 0);
|
|
125
|
+
__decorate([
|
|
126
|
+
state(),
|
|
127
|
+
__metadata("design:type", Object)
|
|
128
|
+
], AppliedWhenDialog.prototype, "until", void 0);
|
|
129
|
+
AppliedWhenDialog = __decorate([
|
|
130
|
+
customElement('applied-when-dialog')
|
|
131
|
+
], AppliedWhenDialog);
|
|
132
|
+
export { AppliedWhenDialog };
|
|
133
|
+
function labelOf(field) {
|
|
134
|
+
return i18next.t(`field.${field}`, { defaultValue: field });
|
|
135
|
+
}
|
|
136
|
+
export { CLAIMED_FIELDS };
|
|
137
|
+
//# sourceMappingURL=applied-when-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applied-when-dialog.js","sourceRoot":"","sources":["../../../client/pages/master/applied-when-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/text-button.js'\nimport '@operato/popup/ox-popup-actions.js'\nimport { i18next } from '@operato/i18n'\n\nimport { CLAIMED_FIELDS } from './assignment-fields.js'\n\n/**\n * **언제부터 그러한가를 묻는 자리.**\n *\n * ── 왜 날짜 칸 하나가 아닌가 ───────────────────────────────────────────────\n * 그리드에 날짜 열을 하나 더하면 사람은 그것을 **또 하나의 값**으로 읽는다. 이 셋(자리 배정 · 근무조\n * 선언 · 부모 관계)은 값이 아니라 **언제부터 그렇게 볼 것인가**를 함께 정하는 일이고, 과거를 적으면\n * **지연 기록인지 정정인지**까지 갈라야 한다. 그래서 저장 직전에 한 번 묻는다.\n *\n * ```\n * 바뀌기 전 → 바뀐 뒤\n * 적용 시작 기본값 「지금부터」\n * 과거 시각이면 지연 기록인가 이미 적은 것의 정정인가\n * 미래 시각이면 지금 값은 그대로이고 변경이 예약된다고 알린다\n * ```\n *\n * ⚠ **기록 시각은 안 묻는다.** 사람이 넣으면 「언제 알았나」를 사람이 정하게 된다 — 서버가 붙인다.\n */\nexport interface AppliedAnswer {\n at?: string\n kind?: 'change' | 'correction'\n until?: string\n}\n\nexport interface AssignmentChange {\n rowName: string\n field: string\n before: string\n after: string\n}\n\n@customElement('applied-when-dialog')\nexport class AppliedWhenDialog extends LitElement {\n static styles = css`\n :host {\n display: block;\n padding: var(--spacing-medium, 12px);\n }\n .what {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: var(--spacing-tiny, 4px) var(--spacing-small, 8px);\n margin-bottom: var(--spacing-medium, 12px);\n }\n .what span {\n color: var(--md-sys-color-on-surface-variant);\n }\n .note {\n color: var(--md-sys-color-on-surface-variant);\n margin-top: var(--spacing-small, 8px);\n }\n `\n\n @property({ type: Array }) changes: AssignmentChange[] = []\n @property({ type: Object }) onAnswer?: (answer: AppliedAnswer) => void\n @property({ type: Object }) onCancel?: () => void\n\n @state() private at = ''\n @state() private kind: 'change' | 'correction' = 'change'\n @state() private until = ''\n\n /** 안 적으면 지금부터다 — 그 기본값이 곧 「지금부터」라는 주장이다. */\n private get when(): number {\n return this.at ? new Date(this.at).getTime() : Date.now()\n }\n\n private get past(): boolean {\n return this.when < Date.now() - 60000\n }\n\n private get future(): boolean {\n return this.when > Date.now() + 60000\n }\n\n render() {\n return html`\n <div class=\"what\">\n ${this.changes.map(\n one => html`\n <span>${one.rowName} · ${labelOf(one.field)}</span>\n <div>${one.before || i18next.t('text.none')} → <b>${one.after || i18next.t('text.none')}</b></div>\n `\n )}\n </div>\n\n <label>\n ${i18next.t('label.applied-from')}\n <input\n type=\"datetime-local\"\n .value=${this.at}\n @change=${(e: Event) => (this.at = (e.target as HTMLInputElement).value)}\n placeholder=${i18next.t('text.from-now')}\n />\n </label>\n\n ${this.past\n ? html`\n <div>\n <label>\n <input type=\"radio\" name=\"kind\" ?checked=${this.kind === 'change'} @change=${() => (this.kind = 'change')} />\n ${i18next.t('label.late-record')}\n </label>\n <label>\n <input type=\"radio\" name=\"kind\" ?checked=${this.kind === 'correction'} @change=${() => (this.kind = 'correction')} />\n ${i18next.t('label.correct-what-was-recorded')}\n </label>\n ${this.kind === 'correction'\n ? html`\n <label>\n ${i18next.t('label.applied-until')}\n <input type=\"datetime-local\" .value=${this.until} @change=${(e: Event) => (this.until = (e.target as HTMLInputElement).value)} />\n </label>\n `\n : ''}\n </div>\n `\n : ''}\n ${this.future ? html`<div class=\"note\">${i18next.t('text.change-is-scheduled')}</div>` : ''}\n\n <ox-popup-actions>\n <md-text-button slot=\"cancel\" @click=${() => this.onCancel?.()}>${i18next.t('button.cancel')}</md-text-button>\n <md-filled-button\n slot=\"confirm\"\n @click=${() =>\n this.onAnswer?.({\n ...(this.at ? { at: new Date(this.at).toISOString() } : {}),\n ...(this.past ? { kind: this.kind } : {}),\n ...(this.past && this.kind === 'correction' && this.until ? { until: new Date(this.until).toISOString() } : {})\n })}\n >\n ${i18next.t('button.save')}\n </md-filled-button>\n </ox-popup-actions>\n `\n }\n}\n\nfunction labelOf(field: string): string {\n return i18next.t(`field.${field}`, { defaultValue: field })\n}\n\nexport { CLAIMED_FIELDS }\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **이력을 받는 칸 셋** — 화면이 저장 직전에 「언제부터」를 묻는 대상.
|
|
3
|
+
*
|
|
4
|
+
* 서버의 `CLAIMED_FIELDS` 와 같은 목록이다. 화면이 서버를 import 하지 않으므로(그러면 빌드가
|
|
5
|
+
* 옮겨 간다) 여기 한 벌을 둔다 — **갈라지면 안 묻고 보내는 칸이 생긴다.**
|
|
6
|
+
*/
|
|
7
|
+
export declare const CLAIMED_FIELDS: {
|
|
8
|
+
axis: string;
|
|
9
|
+
field: string;
|
|
10
|
+
}[];
|
|
11
|
+
/** 이 축에서 이력을 받는 칸들. */
|
|
12
|
+
export declare function claimedFieldsOf(axis: string): string[];
|
|
13
|
+
export interface AssignmentChange {
|
|
14
|
+
rowName: string;
|
|
15
|
+
field: string;
|
|
16
|
+
before: string;
|
|
17
|
+
after: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 바뀐 것 중 **이력을 받는 칸을 건드린 것**만 고른다.
|
|
21
|
+
*
|
|
22
|
+
* ⚠ **새로 만드는 행은 안 묻는다**(`__dirty__` 가 `+` 다). 그 행은 그 순간 생긴 것이고 「언제부터」는
|
|
23
|
+
* 그 순간이다. 물으면 존재하기 전의 자리를 적을 수 있게 된다.
|
|
24
|
+
*
|
|
25
|
+
* ⚠ **안 바뀐 칸은 애초에 `__dirtyfields__` 에 없다.** 그리드가 이미 가려 준다.
|
|
26
|
+
*/
|
|
27
|
+
export declare function assignmentChangesIn(axis: string, patches: readonly Record<string, unknown>[]): AssignmentChange[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **이력을 받는 칸 셋** — 화면이 저장 직전에 「언제부터」를 묻는 대상.
|
|
3
|
+
*
|
|
4
|
+
* 서버의 `CLAIMED_FIELDS` 와 같은 목록이다. 화면이 서버를 import 하지 않으므로(그러면 빌드가
|
|
5
|
+
* 옮겨 간다) 여기 한 벌을 둔다 — **갈라지면 안 묻고 보내는 칸이 생긴다.**
|
|
6
|
+
*/
|
|
7
|
+
export const CLAIMED_FIELDS = [
|
|
8
|
+
{ axis: 'equipment', field: 'homeLocation' },
|
|
9
|
+
{ axis: 'operationalLocation', field: 'workShiftNames' },
|
|
10
|
+
{ axis: 'operationalLocation', field: 'parentId' }
|
|
11
|
+
];
|
|
12
|
+
/** 이 축에서 이력을 받는 칸들. */
|
|
13
|
+
export function claimedFieldsOf(axis) {
|
|
14
|
+
return CLAIMED_FIELDS.filter(one => one.axis === axis).map(one => one.field);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 바뀐 것 중 **이력을 받는 칸을 건드린 것**만 고른다.
|
|
18
|
+
*
|
|
19
|
+
* ⚠ **새로 만드는 행은 안 묻는다**(`__dirty__` 가 `+` 다). 그 행은 그 순간 생긴 것이고 「언제부터」는
|
|
20
|
+
* 그 순간이다. 물으면 존재하기 전의 자리를 적을 수 있게 된다.
|
|
21
|
+
*
|
|
22
|
+
* ⚠ **안 바뀐 칸은 애초에 `__dirtyfields__` 에 없다.** 그리드가 이미 가려 준다.
|
|
23
|
+
*/
|
|
24
|
+
export function assignmentChangesIn(axis, patches) {
|
|
25
|
+
const fields = claimedFieldsOf(axis);
|
|
26
|
+
if (!fields.length) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const changes = [];
|
|
30
|
+
for (const patch of patches) {
|
|
31
|
+
/*
|
|
32
|
+
* **그리드가 무엇이 바뀌었는지 이미 들고 있다.** `__dirtyfields__` 에 칸마다 before·after 가
|
|
33
|
+
* 있고, 바뀐 행은 `__dirty__` 가 `M` 이다.
|
|
34
|
+
*
|
|
35
|
+
* ⚠ 처음에 `cuFlag` 를 봤다 — 그것은 서버로 보낼 때 붙는 이름이고 **이 시점에는 없다.** 그래서
|
|
36
|
+
* 창이 영영 안 떴다. 화면을 열어 보기 전에는 안 보였다(2026-09-22).
|
|
37
|
+
*/
|
|
38
|
+
if (String(patch.__dirty__ ?? '').toUpperCase() !== 'M') {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const dirty = patch.__dirtyfields__;
|
|
42
|
+
for (const field of fields) {
|
|
43
|
+
const moved = dirty?.[field];
|
|
44
|
+
if (!moved) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const before = show(moved.before);
|
|
48
|
+
const after = show(moved.after);
|
|
49
|
+
if (before !== after) {
|
|
50
|
+
changes.push({ rowName: String(patch.name ?? patch.id), field, before, after });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return changes;
|
|
55
|
+
}
|
|
56
|
+
function show(value) {
|
|
57
|
+
if (value === null || value === undefined || value === '') {
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
return Array.isArray(value) ? value.map(String).join(', ') : String(value);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=assignment-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignment-fields.js","sourceRoot":"","sources":["../../../client/pages/master/assignment-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsC;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE;IAC5C,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACxD,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,UAAU,EAAE;CACnD,CAAA;AAED,uBAAuB;AACvB,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAC9E,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAA2C;IAC3F,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IAEpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B;;;;;;WAMG;QACH,IAAI,MAAM,CAAE,KAAa,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACjE,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAI,KAAa,CAAC,eAAoF,CAAA;QAEjH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;YAE5B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAE/B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5E,CAAC","sourcesContent":["/**\n * **이력을 받는 칸 셋** — 화면이 저장 직전에 「언제부터」를 묻는 대상.\n *\n * 서버의 `CLAIMED_FIELDS` 와 같은 목록이다. 화면이 서버를 import 하지 않으므로(그러면 빌드가\n * 옮겨 간다) 여기 한 벌을 둔다 — **갈라지면 안 묻고 보내는 칸이 생긴다.**\n */\nexport const CLAIMED_FIELDS: { axis: string; field: string }[] = [\n { axis: 'equipment', field: 'homeLocation' },\n { axis: 'operationalLocation', field: 'workShiftNames' },\n { axis: 'operationalLocation', field: 'parentId' }\n]\n\n/** 이 축에서 이력을 받는 칸들. */\nexport function claimedFieldsOf(axis: string): string[] {\n return CLAIMED_FIELDS.filter(one => one.axis === axis).map(one => one.field)\n}\n\nexport interface AssignmentChange {\n rowName: string\n field: string\n before: string\n after: string\n}\n\n/**\n * 바뀐 것 중 **이력을 받는 칸을 건드린 것**만 고른다.\n *\n * ⚠ **새로 만드는 행은 안 묻는다**(`__dirty__` 가 `+` 다). 그 행은 그 순간 생긴 것이고 「언제부터」는\n * 그 순간이다. 물으면 존재하기 전의 자리를 적을 수 있게 된다.\n *\n * ⚠ **안 바뀐 칸은 애초에 `__dirtyfields__` 에 없다.** 그리드가 이미 가려 준다.\n */\nexport function assignmentChangesIn(axis: string, patches: readonly Record<string, unknown>[]): AssignmentChange[] {\n const fields = claimedFieldsOf(axis)\n\n if (!fields.length) {\n return []\n }\n\n const changes: AssignmentChange[] = []\n\n for (const patch of patches) {\n /*\n * **그리드가 무엇이 바뀌었는지 이미 들고 있다.** `__dirtyfields__` 에 칸마다 before·after 가\n * 있고, 바뀐 행은 `__dirty__` 가 `M` 이다.\n *\n * ⚠ 처음에 `cuFlag` 를 봤다 — 그것은 서버로 보낼 때 붙는 이름이고 **이 시점에는 없다.** 그래서\n * 창이 영영 안 떴다. 화면을 열어 보기 전에는 안 보였다(2026-09-22).\n */\n if (String((patch as any).__dirty__ ?? '').toUpperCase() !== 'M') {\n continue\n }\n\n const dirty = (patch as any).__dirtyfields__ as Record<string, { before?: unknown; after?: unknown }> | undefined\n\n for (const field of fields) {\n const moved = dirty?.[field]\n\n if (!moved) {\n continue\n }\n\n const before = show(moved.before)\n const after = show(moved.after)\n\n if (before !== after) {\n changes.push({ rowName: String(patch.name ?? patch.id), field, before, after })\n }\n }\n }\n\n return changes\n}\n\nfunction show(value: unknown): string {\n if (value === null || value === undefined || value === '') {\n return ''\n }\n\n return Array.isArray(value) ? value.map(String).join(', ') : String(value)\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MasterPageBase, MasterSpec } from './master-page-base.js';
|
|
2
|
+
/**
|
|
3
|
+
* 설비를 묶는 틀. 「1200톤 사출기」처럼 같은 종류의 설비가 공유하는 성질을 정한다.
|
|
4
|
+
*
|
|
5
|
+
* 설비 하나하나가 이 등급을 가리킨다. 등급을 고치면 그 등급의 설비 전체가 함께 바뀐다.
|
|
6
|
+
*
|
|
7
|
+
* 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
|
|
8
|
+
* 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
|
|
9
|
+
*/
|
|
10
|
+
export declare class OpsMasterEquipmentClass extends MasterPageBase {
|
|
11
|
+
protected get spec(): MasterSpec;
|
|
12
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators.js';
|
|
3
|
+
import { EFFECTIVE, IDENTITY, MasterPageBase } from './master-page-base.js';
|
|
4
|
+
/**
|
|
5
|
+
* 설비를 묶는 틀. 「1200톤 사출기」처럼 같은 종류의 설비가 공유하는 성질을 정한다.
|
|
6
|
+
*
|
|
7
|
+
* 설비 하나하나가 이 등급을 가리킨다. 등급을 고치면 그 등급의 설비 전체가 함께 바뀐다.
|
|
8
|
+
*
|
|
9
|
+
* 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
|
|
10
|
+
* 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
|
|
11
|
+
*/
|
|
12
|
+
let OpsMasterEquipmentClass = class OpsMasterEquipmentClass extends MasterPageBase {
|
|
13
|
+
get spec() {
|
|
14
|
+
return {
|
|
15
|
+
key: 'equipmentClass',
|
|
16
|
+
title: 'equipment-class',
|
|
17
|
+
help: 'ops-master/equipment-class',
|
|
18
|
+
query: 'equipmentClasses',
|
|
19
|
+
mutation: 'updateMultipleEquipmentClass',
|
|
20
|
+
columns: [
|
|
21
|
+
...IDENTITY,
|
|
22
|
+
{ name: 'baseIds', label: 'base-classes', type: 'reference-list', reference: { queryName: 'equipmentClasses' }, width: 180 },
|
|
23
|
+
/*
|
|
24
|
+
* ── 나를 누가 쓰나 ────────────────────────────────────────────────
|
|
25
|
+
*
|
|
26
|
+
* 값의 주인이 이 표가 아니라 **저쪽 표**다. 그래서 여기서 못 고친다 — 바꾸려면 그쪽에서
|
|
27
|
+
* 이 이름을 가리키게 하거나 떼면 된다.
|
|
28
|
+
*
|
|
29
|
+
* 넘치면 **몇이 안 보이는지 함께 낸다.** 오류보고없이 자르면 「셋이 있다」와 「서른이 있는데
|
|
30
|
+
* 셋만 보인다」가 같아 보이고, 그 칸을 보고 사람이 판단을 내린다.
|
|
31
|
+
*/
|
|
32
|
+
{ name: 'members', label: 'members', type: 'list', width: 240, readonly: true },
|
|
33
|
+
...EFFECTIVE
|
|
34
|
+
]
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
OpsMasterEquipmentClass = __decorate([
|
|
39
|
+
customElement('ops-master-equipment-class')
|
|
40
|
+
], OpsMasterEquipmentClass);
|
|
41
|
+
export { OpsMasterEquipmentClass };
|
|
42
|
+
//# sourceMappingURL=equipment-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equipment-class.js","sourceRoot":"","sources":["../../../client/pages/master/equipment-class.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,uBAAuB,CAAA;AAEvF;;;;;;;GAOG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,cAAc;IACzD,IAAc,IAAI;QAChB,OAAO;YACL,GAAG,EAAE,gBAAgB;YACrB,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,4BAA4B;YAClC,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EAAE,8BAA8B;YACxC,OAAO,EAAE;gBACP,GAAG,QAAQ;gBACX,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;gBAC5H;;;;;;;;mBAQG;gBACH,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/E,GAAG,SAAS;aACb;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAzBY,uBAAuB;IADnC,aAAa,CAAC,4BAA4B,CAAC;GAC/B,uBAAuB,CAyBnC","sourcesContent":["import { customElement } from 'lit/decorators.js'\n\nimport { EFFECTIVE, IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\n\n/**\n * 설비를 묶는 틀. 「1200톤 사출기」처럼 같은 종류의 설비가 공유하는 성질을 정한다.\n *\n * 설비 하나하나가 이 등급을 가리킨다. 등급을 고치면 그 등급의 설비 전체가 함께 바뀐다.\n *\n * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —\n * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.\n */\n@customElement('ops-master-equipment-class')\nexport class OpsMasterEquipmentClass extends MasterPageBase {\n protected get spec(): MasterSpec {\n return {\n key: 'equipmentClass',\n title: 'equipment-class',\n help: 'ops-master/equipment-class',\n query: 'equipmentClasses',\n mutation: 'updateMultipleEquipmentClass',\n columns: [\n ...IDENTITY,\n { name: 'baseIds', label: 'base-classes', type: 'reference-list', reference: { queryName: 'equipmentClasses' }, width: 180 },\n /*\n * ── 나를 누가 쓰나 ────────────────────────────────────────────────\n *\n * 값의 주인이 이 표가 아니라 **저쪽 표**다. 그래서 여기서 못 고친다 — 바꾸려면 그쪽에서\n * 이 이름을 가리키게 하거나 떼면 된다.\n *\n * 넘치면 **몇이 안 보이는지 함께 낸다.** 오류보고없이 자르면 「셋이 있다」와 「서른이 있는데\n * 셋만 보인다」가 같아 보이고, 그 칸을 보고 사람이 판단을 내린다.\n */\n { name: 'members', label: 'members', type: 'list', width: 240, readonly: true },\n ...EFFECTIVE\n ]\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MasterPageBase, MasterSpec } from './master-page-base.js';
|
|
2
|
+
/**
|
|
3
|
+
* 실제로 돌아가는 설비 하나하나. 실적과 정지 기록이 이것에 붙는다.
|
|
4
|
+
*
|
|
5
|
+
* 근무 캘린더를 정해야 계획 조업 시간이 생기고, 그것이 없으면 가동률이 「모름」이 된다.
|
|
6
|
+
*
|
|
7
|
+
* 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
|
|
8
|
+
* 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
|
|
9
|
+
*/
|
|
10
|
+
export declare class OpsMasterEquipment extends MasterPageBase {
|
|
11
|
+
protected get spec(): MasterSpec;
|
|
12
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators.js';
|
|
3
|
+
import { EFFECTIVE, IDENTITY, MasterPageBase } from './master-page-base.js';
|
|
4
|
+
/**
|
|
5
|
+
* 실제로 돌아가는 설비 하나하나. 실적과 정지 기록이 이것에 붙는다.
|
|
6
|
+
*
|
|
7
|
+
* 근무 캘린더를 정해야 계획 조업 시간이 생기고, 그것이 없으면 가동률이 「모름」이 된다.
|
|
8
|
+
*
|
|
9
|
+
* 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —
|
|
10
|
+
* 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.
|
|
11
|
+
*/
|
|
12
|
+
let OpsMasterEquipment = class OpsMasterEquipment extends MasterPageBase {
|
|
13
|
+
get spec() {
|
|
14
|
+
return {
|
|
15
|
+
key: 'equipment',
|
|
16
|
+
axis: 'equipment',
|
|
17
|
+
title: 'equipment',
|
|
18
|
+
help: 'ops-master/equipment',
|
|
19
|
+
query: 'equipmentList',
|
|
20
|
+
mutation: 'updateMultipleEquipment',
|
|
21
|
+
columns: [
|
|
22
|
+
...IDENTITY,
|
|
23
|
+
{ name: 'kind', label: 'equipment-class', type: 'string', width: 200 },
|
|
24
|
+
{ name: 'identity', label: 'identity', type: 'string', width: 200 },
|
|
25
|
+
{
|
|
26
|
+
name: 'homeLocation',
|
|
27
|
+
label: 'home-location',
|
|
28
|
+
type: 'reference',
|
|
29
|
+
reference: { queryName: 'operationalLocations' },
|
|
30
|
+
width: 140
|
|
31
|
+
},
|
|
32
|
+
/*
|
|
33
|
+
* ── 손으로 칠 수 있는 값이 아니다 ─────────────────────────────────
|
|
34
|
+
*
|
|
35
|
+
* `type: 'json'` 은 글자를 그대로 받아 `JSON.parse` 하고, 실패하면 **오류 없이 `null`**
|
|
36
|
+
* 로 둔다(`data-grid-body.js`). 그래서 이 칸을 고치려면 사람이 이런 것을 손으로 쳐야
|
|
37
|
+
* 했고, 오타 하나에 그 설비의 계획 가동 시간이 조용히 사라졌다.
|
|
38
|
+
*
|
|
39
|
+
* [{"id":"A조","fromDayOffset":0,"fromTime":"06:00","toDayOffset":0,"toTime":"14:00"}]
|
|
40
|
+
*
|
|
41
|
+
* 그리고 **정상은 이 칸이 비는 것**이다. 근무조는 자리가 선언하고 설비가 물려받는다
|
|
42
|
+
* (`OperationalLocation.workShiftNames`). 이 칸은 「이 설비만 따로 이렇게 가동한다」는
|
|
43
|
+
* 예외를 적는 자리다 — 예외가 없는 설비에 값이 있으면 화면이 거짓말을 한다.
|
|
44
|
+
*
|
|
45
|
+
* 읽기 전용으로 둔다. 값이 있으면 보이고, 고치는 길은 예외를 제대로 세울 때 만든다.
|
|
46
|
+
* 지금 상태로 열어 두는 것은 고칠 수 있는 척하면서 자료를 잃는 것이다.
|
|
47
|
+
*/
|
|
48
|
+
{ name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200, readonly: true },
|
|
49
|
+
...EFFECTIVE
|
|
50
|
+
]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
OpsMasterEquipment = __decorate([
|
|
55
|
+
customElement('ops-master-equipment')
|
|
56
|
+
], OpsMasterEquipment);
|
|
57
|
+
export { OpsMasterEquipment };
|
|
58
|
+
//# sourceMappingURL=equipment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../../client/pages/master/equipment.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,uBAAuB,CAAA;AAEvF;;;;;;;GAOG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,cAAc;IACpD,IAAc,IAAI;QAChB,OAAO;YACL,GAAG,EAAE,WAAW;YAChB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE;gBACP,GAAG,QAAQ;gBACX,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACtE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACnE;oBACE,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,eAAe;oBACtB,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE;oBAChD,KAAK,EAAE,GAAG;iBACX;gBACD;;;;;;;;;;;;;;;mBAeG;gBACH,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC1F,GAAG,SAAS;aACb;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAzCY,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAyC9B","sourcesContent":["import { customElement } from 'lit/decorators.js'\n\nimport { EFFECTIVE, IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\n\n/**\n * 실제로 돌아가는 설비 하나하나. 실적과 정지 기록이 이것에 붙는다.\n *\n * 근무 캘린더를 정해야 계획 조업 시간이 생기고, 그것이 없으면 가동률이 「모름」이 된다.\n *\n * 화면 골격과 저장은 MasterPageBase 가 갖는다. 이 파일은 **이 화면이 무엇을 보이나**만 말한다 —\n * 자기 인터페이스가 필요해지면 여기서 render 를 덮어쓴다.\n */\n@customElement('ops-master-equipment')\nexport class OpsMasterEquipment extends MasterPageBase {\n protected get spec(): MasterSpec {\n return {\n key: 'equipment',\n axis: 'equipment',\n title: 'equipment',\n help: 'ops-master/equipment',\n query: 'equipmentList',\n mutation: 'updateMultipleEquipment',\n columns: [\n ...IDENTITY,\n { name: 'kind', label: 'equipment-class', type: 'string', width: 200 },\n { name: 'identity', label: 'identity', type: 'string', width: 200 },\n {\n name: 'homeLocation',\n label: 'home-location',\n type: 'reference',\n reference: { queryName: 'operationalLocations' },\n width: 140\n },\n /*\n * ── 손으로 칠 수 있는 값이 아니다 ─────────────────────────────────\n *\n * `type: 'json'` 은 글자를 그대로 받아 `JSON.parse` 하고, 실패하면 **오류 없이 `null`**\n * 로 둔다(`data-grid-body.js`). 그래서 이 칸을 고치려면 사람이 이런 것을 손으로 쳐야\n * 했고, 오타 하나에 그 설비의 계획 가동 시간이 조용히 사라졌다.\n *\n * [{\"id\":\"A조\",\"fromDayOffset\":0,\"fromTime\":\"06:00\",\"toDayOffset\":0,\"toTime\":\"14:00\"}]\n *\n * 그리고 **정상은 이 칸이 비는 것**이다. 근무조는 자리가 선언하고 설비가 물려받는다\n * (`OperationalLocation.workShiftNames`). 이 칸은 「이 설비만 따로 이렇게 가동한다」는\n * 예외를 적는 자리다 — 예외가 없는 설비에 값이 있으면 화면이 거짓말을 한다.\n *\n * 읽기 전용으로 둔다. 값이 있으면 보이고, 고치는 길은 예외를 제대로 세울 때 만든다.\n * 지금 상태로 열어 두는 것은 고칠 수 있는 척하면서 자료를 잃는 것이다.\n */\n { name: 'workCalendar', label: 'work-calendar', type: 'json', width: 200, readonly: true },\n ...EFFECTIVE\n ]\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OxGristEditor } from '@operato/data-grist';
|
|
2
|
+
export declare const OxGristRendererIsoDuration: (value: string | undefined) => import("lit-html").TemplateResult<1>;
|
|
3
|
+
export declare class OpsMasterGristEditorIsoDuration extends OxGristEditor {
|
|
4
|
+
get inlineEditable(): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* 저장된 표기 → 편집기.
|
|
7
|
+
*
|
|
8
|
+
* 초로 고치게 한다. 이 공정들의 소요시간은 6.5초에서 360초 사이라 초가 자연스럽고, 저장되는
|
|
9
|
+
* 표기와도 맞는다.
|
|
10
|
+
*/
|
|
11
|
+
formatForEditor(value: any): number | "";
|
|
12
|
+
/**
|
|
13
|
+
* 편집기 → 저장할 표기.
|
|
14
|
+
*
|
|
15
|
+
* **빈 칸은 지운 것으로 본다.** 0 으로 떨어뜨리면 그냥 지나간 칸이 「즉시 끝나는 공정」이 되고,
|
|
16
|
+
* 그 공정은 택트 계산에서 없는 것처럼 통과한다.
|
|
17
|
+
*/
|
|
18
|
+
formatFromEditor(value: any): any;
|
|
19
|
+
get editorTemplate(): import("lit-html").TemplateResult<1>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { customElement } from 'lit/decorators.js';
|
|
4
|
+
import { OxGristEditor } from '@operato/data-grist';
|
|
5
|
+
import { i18next } from '@operato/i18n';
|
|
6
|
+
import { durationText, isoDurationOfSeconds, secondsOfIsoDuration } from './iso-duration.js';
|
|
7
|
+
/**
|
|
8
|
+
* ISO 8601 기간 칸의 그리기와 고치기.
|
|
9
|
+
*
|
|
10
|
+
* `@operato/grist-editor` 의 `duration` 은 **초 숫자**용이라 여기 못 쓴다 — 자세한 사연은
|
|
11
|
+
* `iso-duration.ts` 첫 주석에 있다. 값의 해석은 그 파일이 하고, 여기는 화면만 맡는다.
|
|
12
|
+
*/
|
|
13
|
+
/** 시·분·초 용어. 공용 패키지가 이미 갖고 있어 새로 만들지 않는다. */
|
|
14
|
+
function units() {
|
|
15
|
+
return {
|
|
16
|
+
hour: i18next.t('label.hours'),
|
|
17
|
+
minute: i18next.t('label.minutes'),
|
|
18
|
+
second: i18next.t('label.seconds')
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export const OxGristRendererIsoDuration = (value) => html `<span>${durationText(value, units())}</span>`;
|
|
22
|
+
let OpsMasterGristEditorIsoDuration = class OpsMasterGristEditorIsoDuration extends OxGristEditor {
|
|
23
|
+
get inlineEditable() {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 저장된 표기 → 편집기.
|
|
28
|
+
*
|
|
29
|
+
* 초로 고치게 한다. 이 공정들의 소요시간은 6.5초에서 360초 사이라 초가 자연스럽고, 저장되는
|
|
30
|
+
* 표기와도 맞는다.
|
|
31
|
+
*/
|
|
32
|
+
formatForEditor(value) {
|
|
33
|
+
const seconds = secondsOfIsoDuration(value);
|
|
34
|
+
/*
|
|
35
|
+
* 해석할 수 없는 값이면 편집기를 비운다. 렌더러가 원문을 보여 주었으므로 사용자는 무엇이
|
|
36
|
+
* 이상했는지 이미 보았다.
|
|
37
|
+
*/
|
|
38
|
+
return seconds === undefined ? '' : seconds;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 편집기 → 저장할 표기.
|
|
42
|
+
*
|
|
43
|
+
* **빈 칸은 지운 것으로 본다.** 0 으로 떨어뜨리면 그냥 지나간 칸이 「즉시 끝나는 공정」이 되고,
|
|
44
|
+
* 그 공정은 택트 계산에서 없는 것처럼 통과한다.
|
|
45
|
+
*/
|
|
46
|
+
formatFromEditor(value) {
|
|
47
|
+
const text = String(value ?? '').trim();
|
|
48
|
+
if (!text) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const seconds = Number(text);
|
|
52
|
+
/*
|
|
53
|
+
* 숫자가 아니면 **저장하지 않고 앞의 값을 둔다.** 여기서 null 을 내면 사용자가 잘못 친 순간
|
|
54
|
+
* 원래 있던 소요시간이 사라진다.
|
|
55
|
+
*/
|
|
56
|
+
if (!Number.isFinite(seconds) || seconds < 0) {
|
|
57
|
+
return this.value;
|
|
58
|
+
}
|
|
59
|
+
return isoDurationOfSeconds(seconds);
|
|
60
|
+
}
|
|
61
|
+
get editorTemplate() {
|
|
62
|
+
/* 초 단위. 작업표준서에 6.5초 같은 값이 있어 소수를 받는다. */
|
|
63
|
+
return html `<input type="number" min="0" step="0.1" .value=${this.value ?? ''} />`;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
OpsMasterGristEditorIsoDuration = __decorate([
|
|
67
|
+
customElement('ops-master-grist-editor-iso-duration')
|
|
68
|
+
], OpsMasterGristEditorIsoDuration);
|
|
69
|
+
export { OpsMasterGristEditorIsoDuration };
|
|
70
|
+
//# sourceMappingURL=grist-iso-duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grist-iso-duration.js","sourceRoot":"","sources":["../../../client/pages/master/grist-iso-duration.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE5F;;;;;GAKG;AAEH,6CAA6C;AAC7C,SAAS,KAAK;IACZ,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;KACnC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAyB,EAAE,EAAE,CACtE,IAAI,CAAA,SAAS,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,SAAS,CAAA;AAG7C,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,aAAa;IAChE,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,KAAU;QACxB,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAE3C;;;WAGG;QACH,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IAC7C,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,KAAU;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAE5B;;;WAGG;QACH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QAED,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,cAAc;QAChB,yCAAyC;QACzC,OAAO,IAAI,CAAA,kDAAkD,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,CAAA;IACpF,CAAC;CACF,CAAA;AAnDY,+BAA+B;IAD3C,aAAa,CAAC,sCAAsC,CAAC;GACzC,+BAA+B,CAmD3C","sourcesContent":["import { html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\n\nimport { durationText, isoDurationOfSeconds, secondsOfIsoDuration } from './iso-duration.js'\n\n/**\n * ISO 8601 기간 칸의 그리기와 고치기.\n *\n * `@operato/grist-editor` 의 `duration` 은 **초 숫자**용이라 여기 못 쓴다 — 자세한 사연은\n * `iso-duration.ts` 첫 주석에 있다. 값의 해석은 그 파일이 하고, 여기는 화면만 맡는다.\n */\n\n/** 시·분·초 용어. 공용 패키지가 이미 갖고 있어 새로 만들지 않는다. */\nfunction units() {\n return {\n hour: i18next.t('label.hours'),\n minute: i18next.t('label.minutes'),\n second: i18next.t('label.seconds')\n }\n}\n\nexport const OxGristRendererIsoDuration = (value: string | undefined) =>\n html`<span>${durationText(value, units())}</span>`\n\n@customElement('ops-master-grist-editor-iso-duration')\nexport class OpsMasterGristEditorIsoDuration extends OxGristEditor {\n get inlineEditable() {\n return true\n }\n\n /**\n * 저장된 표기 → 편집기.\n *\n * 초로 고치게 한다. 이 공정들의 소요시간은 6.5초에서 360초 사이라 초가 자연스럽고, 저장되는\n * 표기와도 맞는다.\n */\n formatForEditor(value: any) {\n const seconds = secondsOfIsoDuration(value)\n\n /*\n * 해석할 수 없는 값이면 편집기를 비운다. 렌더러가 원문을 보여 주었으므로 사용자는 무엇이\n * 이상했는지 이미 보았다.\n */\n return seconds === undefined ? '' : seconds\n }\n\n /**\n * 편집기 → 저장할 표기.\n *\n * **빈 칸은 지운 것으로 본다.** 0 으로 떨어뜨리면 그냥 지나간 칸이 「즉시 끝나는 공정」이 되고,\n * 그 공정은 택트 계산에서 없는 것처럼 통과한다.\n */\n formatFromEditor(value: any) {\n const text = String(value ?? '').trim()\n\n if (!text) {\n return null\n }\n\n const seconds = Number(text)\n\n /*\n * 숫자가 아니면 **저장하지 않고 앞의 값을 둔다.** 여기서 null 을 내면 사용자가 잘못 친 순간\n * 원래 있던 소요시간이 사라진다.\n */\n if (!Number.isFinite(seconds) || seconds < 0) {\n return this.value\n }\n\n return isoDurationOfSeconds(seconds)\n }\n\n get editorTemplate() {\n /* 초 단위. 작업표준서에 6.5초 같은 값이 있어 소수를 받는다. */\n return html`<input type=\"number\" min=\"0\" step=\"0.1\" .value=${this.value ?? ''} />`\n }\n}\n"]}
|