@things-factory/ops-master 10.1.79 → 10.1.81
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/pages/master/revision-workspace.js +32 -25
- package/dist-client/pages/master/revision-workspace.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/asset/index.d.ts +1 -1
- package/dist-server/service/equipment/index.d.ts +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/service/master-change-policy.d.ts +30 -3
- package/dist-server/service/master-change-policy.js +7 -3
- package/dist-server/service/master-change-policy.js.map +1 -1
- package/dist-server/service/material/material-revision-resolver.d.ts +1 -1
- package/dist-server/service/material/material-revision-resolver.js +6 -4
- package/dist-server/service/material/material-revision-resolver.js.map +1 -1
- package/dist-server/service/material/material-revision-service.d.ts +2 -0
- package/dist-server/service/material/material-revision-service.js +6 -1
- package/dist-server/service/material/material-revision-service.js.map +1 -1
- package/dist-server/service/personnel/index.d.ts +1 -1
- package/dist-server/service/recipe/index.d.ts +1 -1
- package/dist-server/service/recipe/recipe-revision-resolver.d.ts +1 -1
- package/dist-server/service/recipe/recipe-revision-resolver.js +6 -4
- package/dist-server/service/recipe/recipe-revision-resolver.js.map +1 -1
- package/dist-server/service/recipe/recipe-revision-service.d.ts +2 -0
- package/dist-server/service/recipe/recipe-revision-service.js +6 -1
- package/dist-server/service/recipe/recipe-revision-service.js.map +1 -1
- package/dist-server/service/test-spec/index.d.ts +1 -1
- package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +1 -1
- package/dist-server/service/test-spec/test-spec-revision-resolver.js +6 -4
- package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +1 -1
- package/dist-server/service/test-spec/test-spec-revision-service.d.ts +2 -0
- package/dist-server/service/test-spec/test-spec-revision-service.js +6 -1
- package/dist-server/service/test-spec/test-spec-revision-service.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -4,6 +4,7 @@ import gql from 'graphql-tag';
|
|
|
4
4
|
import { html, css, nothing } from 'lit';
|
|
5
5
|
import { state } from 'lit/decorators.js';
|
|
6
6
|
import { client } from '@operato/graphql';
|
|
7
|
+
import { i18next } from '@operato/i18n';
|
|
7
8
|
import { OxPrompt } from '@operato/popup';
|
|
8
9
|
import { IDENTITY, MasterPageBase } from './master-page-base.js';
|
|
9
10
|
import { requestMasterChangeApproval, masterChangeStatus } from '../../master-change-approval.js';
|
|
@@ -206,7 +207,7 @@ export class RevisionWorkspace extends MasterPageBase {
|
|
|
206
207
|
actions: this.draft && !this.draft.frozenAt
|
|
207
208
|
? [
|
|
208
209
|
{
|
|
209
|
-
title:
|
|
210
|
+
title: this.approvalRequired ? t('request-approval') : i18next.t('button.save'),
|
|
210
211
|
icon: 'done',
|
|
211
212
|
emphasis: { raised: true },
|
|
212
213
|
disabled: this.busy || this.approvalRequired === undefined,
|
|
@@ -424,7 +425,7 @@ export class RevisionWorkspace extends MasterPageBase {
|
|
|
424
425
|
this.message = t('saved');
|
|
425
426
|
});
|
|
426
427
|
}
|
|
427
|
-
async persist() {
|
|
428
|
+
async persist(publish = false) {
|
|
428
429
|
if (!this.draft || this.draft.frozenAt)
|
|
429
430
|
return;
|
|
430
431
|
const invalid = this.renderRoot.querySelector('input:invalid,textarea:invalid');
|
|
@@ -439,45 +440,51 @@ export class RevisionWorkspace extends MasterPageBase {
|
|
|
439
440
|
? { description, inputs, outputs, materialDefinitionName, route: route || null, effectiveFrom, reason }
|
|
440
441
|
: { version, description, criteria, effectiveFrom, reason };
|
|
441
442
|
const n = this.names;
|
|
442
|
-
const
|
|
443
|
+
const saveOnce = this.material ? 'saveAndPublishMaterialDefinition' : this.recipe ? 'saveAndPublishRecipe' : 'saveAndPublishTestSpecification';
|
|
444
|
+
const response = publish
|
|
443
445
|
? await client.mutate({
|
|
444
|
-
mutation: gql(`mutation($
|
|
445
|
-
variables: {
|
|
446
|
+
mutation: gql(`mutation($subject:String,$name:String,$revisionId:String,$editGeneration:Int,$content:Object!){${saveOnce}(${n.subject}:$subject,name:$name,revisionId:$revisionId,editGeneration:$editGeneration,content:$content)}`),
|
|
447
|
+
variables: { subject: this.overview?.[n.subject], name: this.overview ? undefined : this.newName,
|
|
448
|
+
revisionId: this.draft.id, editGeneration: this.draft.editGeneration, content }
|
|
446
449
|
})
|
|
447
|
-
:
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
450
|
+
: this.draft.id
|
|
451
|
+
? await client.mutate({
|
|
452
|
+
mutation: gql(`mutation($id:String!,$generation:Int!,$content:Object!){${n.edit}(revisionId:$id,editGeneration:$generation,content:$content)}`),
|
|
453
|
+
variables: { id: this.draft.id, generation: this.draft.editGeneration, content }
|
|
454
|
+
})
|
|
455
|
+
: await client.mutate({
|
|
456
|
+
mutation: gql(`mutation($subject:String,$name:String,$content:Object!){${n.create}(${n.subject}:$subject,name:$name,content:$content)}`),
|
|
457
|
+
variables: { subject: this.overview?.[n.subject], name: this.overview ? undefined : this.newName, content }
|
|
458
|
+
});
|
|
451
459
|
this.assert(response);
|
|
452
|
-
this.draft = response.data[n.edit] ?? response.data[n.create];
|
|
460
|
+
this.draft = publish ? response.data[saveOnce].revision : response.data[n.edit] ?? response.data[n.create];
|
|
453
461
|
this.dirty = false;
|
|
454
462
|
await this.load(this.draft[n.subject]);
|
|
455
463
|
await this.grist?.fetch();
|
|
456
464
|
}
|
|
457
465
|
async submit() {
|
|
458
466
|
await this.run(async () => {
|
|
459
|
-
|
|
460
|
-
if (!this.draft?.id || this.draft.frozenAt)
|
|
467
|
+
if (!this.draft || this.draft.frozenAt)
|
|
461
468
|
return;
|
|
462
469
|
await this.policy();
|
|
463
|
-
if (this.approvalRequired)
|
|
464
|
-
await
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
editGeneration: this.draft.editGeneration
|
|
468
|
-
});
|
|
469
|
-
else {
|
|
470
|
-
const response = await client.mutate({
|
|
471
|
-
mutation: gql(`mutation($id:String!,$generation:Int!){${this.names.publish}(revisionId:$id,editGeneration:$generation)}`),
|
|
472
|
-
variables: { id: this.draft.id, generation: this.draft.editGeneration }
|
|
473
|
-
});
|
|
474
|
-
this.assert(response);
|
|
470
|
+
if (!this.approvalRequired) {
|
|
471
|
+
await this.persist(true);
|
|
472
|
+
this.message = t('published');
|
|
473
|
+
return;
|
|
475
474
|
}
|
|
475
|
+
await this.persist();
|
|
476
|
+
if (!this.draft?.id || this.draft.frozenAt)
|
|
477
|
+
return;
|
|
478
|
+
await requestMasterChangeApproval(this, {
|
|
479
|
+
axis: this.axis,
|
|
480
|
+
revisionId: this.draft.id,
|
|
481
|
+
editGeneration: this.draft.editGeneration
|
|
482
|
+
});
|
|
476
483
|
const id = this.draft.id;
|
|
477
484
|
await this.load(this.draft[this.names.subject]);
|
|
478
485
|
this.draft = this.overview.revisions.find((r) => r.id === id);
|
|
479
486
|
await this.grist?.fetch();
|
|
480
|
-
this.message = t(
|
|
487
|
+
this.message = t('submitted');
|
|
481
488
|
});
|
|
482
489
|
}
|
|
483
490
|
content(row, editable = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revision-workspace.js","sourceRoot":"","sources":["../../../client/pages/master/revision-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist/ox-grist.js'\nimport gql from 'graphql-tag'\nimport { html, css, nothing } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { OxPrompt } from '@operato/popup'\nimport { IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\nimport { requestMasterChangeApproval, masterChangeStatus, MasterChangeStatus } from '../../master-change-approval.js'\nimport { revisionText as t, revisionDate as date, revisionStyles } from './revision-comparison.js'\nimport { materialRevisionFields } from './material-revision-fields.js'\nimport { RevisionAxis, localDateTime, isoFromLocal } from './revision-view.js'\n\n/** Shared workflow, not shared domain payload. Both consumers keep their existing page/URL identities. */\nexport abstract class RevisionWorkspace extends MasterPageBase {\n protected abstract axis: RevisionAxis\n static styles = [\n ...MasterPageBase.styles,\n revisionStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n ox-grist {\n flex: 1;\n min-height: 240px;\n }\n ox-grist[hidden] {\n display: none;\n }\n .workspace {\n overflow: auto;\n flex: 1;\n padding: 20px 24px;\n }\n .bar {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n .bar h2 {\n margin: 8px 0;\n font-size: var(--ui-t-title, 20px);\n flex: 1;\n overflow-wrap: anywhere;\n }\n .summary {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));\n gap: 16px;\n margin: 20px 0;\n }\n .card {\n padding: 16px;\n border: 1px solid var(--ui-line);\n border-radius: 6px;\n background: var(--md-sys-color-surface);\n }\n .card h3 {\n margin: 0 0 10px;\n }\n .card p {\n margin: 8px 0;\n }\n .current {\n border-inline-start: 4px solid var(--md-sys-color-primary);\n }\n .fields {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n gap: 16px;\n margin: 16px 0;\n }\n label {\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: var(--ui-t-small, 13px);\n }\n input,\n textarea {\n box-sizing: border-box;\n width: 100%;\n padding: 8px;\n border: 1px solid var(--ui-line);\n border-radius: 4px;\n font: inherit;\n background: var(--md-sys-color-surface);\n color: inherit;\n }\n td input {\n min-width: 100px;\n }\n textarea {\n min-height: 70px;\n }\n .actions {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 20px;\n align-items: center;\n }\n .notice {\n padding: 12px;\n background: var(--md-sys-color-surface-container);\n border-radius: 4px;\n }\n .failure {\n padding: 12px;\n border-inline-start: 4px solid var(--md-sys-color-error);\n color: var(--md-sys-color-error);\n }\n .empty {\n padding: 24px;\n }\n .hint {\n font-size: var(--ui-t-small, 13px);\n }\n .editor {\n border-top: 1px solid var(--ui-line);\n margin-top: 20px;\n padding-top: 12px;\n }\n @media (max-width: 700px) {\n .workspace {\n padding: 12px;\n }\n .summary {\n grid-template-columns: 1fr;\n }\n .fields {\n grid-template-columns: 1fr;\n }\n }\n `\n ]\n @state() private overview: any\n @state() private draft: any\n @state() private newName = ''\n @state() private busy = false\n @state() private dirty = false\n @state() private failure = ''\n @state() private message = ''\n @state() private approvalRequired: boolean | undefined\n @state() private statuses: Record<string, MasterChangeStatus> = {}\n private serial = 0\n private get recipe() {\n return this.axis === 'recipeDefinition'\n }\n private get material() { return this.axis === 'materialDefinition' }\n private get names() {\n if (this.material) return { noun: 'material', list: 'materialDefinitions', overview: 'materialDefinitionRevisions', subject: 'materialId', create: 'createMaterialDefinitionDraft', edit: 'editMaterialDefinitionDraft', publish: 'publishMaterialDefinitionDraft' }\n return this.recipe\n ? {\n noun: 'recipe',\n list: 'recipeDefinitions',\n overview: 'recipeRevisions',\n subject: 'recipeId',\n create: 'createRecipeDraft',\n edit: 'editRecipeDraft',\n publish: 'publishRecipeDraft'\n }\n : {\n noun: 'spec',\n list: 'testSpecifications',\n overview: 'testSpecificationRevisions',\n subject: 'specId',\n create: 'createTestSpecificationDraft',\n edit: 'editTestSpecificationDraft',\n publish: 'publishTestSpecificationDraft'\n }\n }\n protected get spec(): MasterSpec {\n return {\n key: this.axis,\n title: this.material ? 'material' : this.recipe ? 'recipe' : 'test-specification',\n help: 'ops-master/' + (this.material ? 'material-definition' : this.recipe ? 'recipe-definition' : 'test-specification'),\n query: this.names.list,\n mutation: this.material ? 'updateMultipleMaterialDefinition' : this.recipe ? 'updateMultipleRecipeDefinition' : 'updateMultipleTestSpecification',\n columns: [\n ...IDENTITY,\n ...(this.material ? [\n { name: 'rootClasses', label: 'material-type', type: 'list' as const, width: 120 },\n { name: 'classPath', label: 'class-lineage', type: 'list' as const, width: 180 },\n { name: 'madeBy', label: 'made-by', type: 'list' as const, width: 180 },\n { name: 'usedIn', label: 'used-in', type: 'list' as const, width: 180 }\n ] : []),\n { name: 'revisionNumber', label: 'revision', type: 'number' as const },\n { name: 'effectiveStart', label: 'effective-start', type: 'date' as const }\n ].map(column => ({ ...column, readonly: true }))\n }\n }\n protected get pathSegmentNarrowsList() {\n return false\n }\n get context(): any {\n return {\n ...super.context,\n importable: undefined,\n exportable: this.overview || this.draft ? undefined : super.context.exportable,\n search: this.overview || this.draft ? undefined : super.context.search,\n description: t('purpose'),\n actions:\n this.draft && !this.draft.frozenAt\n ? [\n {\n title: t(this.approvalRequired ? 'request-approval' : 'publish'),\n icon: 'done',\n emphasis: { raised: true },\n disabled: this.busy || this.approvalRequired === undefined,\n action: () => this.submit()\n }\n ]\n : this.overview || this.draft\n ? []\n : [\n {\n title: t(this.material ? 'new-material' : this.recipe ? 'new-recipe' : 'new-spec'),\n icon: 'add',\n emphasis: { raised: true },\n action: () => this.startNew()\n }\n ]\n }\n }\n updated(changes: any) {\n super.updated(changes)\n if (this.active && ['overview', 'draft', 'busy', 'approvalRequired'].some(key => changes.has(key)))\n this.updateContext()\n }\n protected configOf() {\n const config = super.configOf()\n return { ...config, rows: { ...config.rows, appendable: false, selectable: { multiple: false } } }\n }\n async pageInitialized() {\n await super.pageInitialized()\n await this.openResource(this.lifecycle?.resourceId)\n }\n async pageUpdated(changes: any, after: any, before: any) {\n await super.pageUpdated()\n if (after?.resourceId !== before?.resourceId) await this.openResource(after?.resourceId)\n }\n private async openResource(key?: string) {\n if (!key) return\n await this.run(async () => {\n const response = await client.query({\n query: gql(`query($filters:[Filter!]){${this.names.list}(filters:$filters){items{id}}}`),\n variables: { filters: [{ name: 'name', operator: 'eq', value: key }] },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n const row = response.data[this.names.list].items[0]\n if (row) await this.load(row.id)\n })\n }\n private assert(response: any) {\n if (response.errors?.length) throw new Error(response.errors.map((e: any) => e.message).join('\\n'))\n if (!response.data) throw new Error(t('no-response'))\n }\n private async run(work: () => Promise<void>) {\n if (this.busy) return\n this.busy = true\n this.failure = ''\n try {\n await work()\n } catch (error) {\n this.failure = (error as Error).message\n } finally {\n this.busy = false\n }\n }\n private async canLeave() {\n return (\n !this.dirty ||\n !!(await OxPrompt.open({\n title: t('unsaved'),\n text: t('discard-question'),\n confirmButton: { text: t('discard') },\n cancelButton: { text: t('keep-editing') }\n }))\n )\n }\n private blank() {\n return {\n version: '1',\n description: '',\n materialDefinitionName: '',\n effectiveFrom: new Date().toISOString(),\n reason: '',\n materialClassIds: [], properties: [], testSpecificationIds: [],\n criteria: [],\n inputs: [],\n outputs: []\n }\n }\n private async policy() {\n const response = await client.query({\n query: gql`\n query ($axis: String!) {\n masterChangePolicy(axis: $axis)\n }\n `,\n variables: { axis: this.axis },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n this.approvalRequired = response.data.masterChangePolicy.approvalRequired\n }\n private async startNew() {\n if (!(await this.canLeave())) return\n await this.run(async () => {\n ++this.serial\n this.overview = undefined\n this.draft = this.blank()\n this.newName = ''\n this.dirty = false\n this.message = ''\n await this.policy()\n })\n }\n private async pick(event: CustomEvent) {\n const row = event.detail?.records?.[0] ?? event.detail?.added?.[0]\n if (!row?.id || !(await this.canLeave())) return\n await this.run(async () => {\n this.draft = undefined\n this.dirty = false\n this.message = ''\n await this.load(row.id)\n })\n }\n private async load(id: string) {\n const serial = ++this.serial\n const response = await client.query({\n query: gql(`query($id:String!){${this.names.overview}(${this.names.subject}:$id)}`),\n variables: { id },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n if (serial !== this.serial) return\n this.overview = response.data[this.names.overview]\n await this.policy()\n const statuses: Record<string, MasterChangeStatus> = {}\n await Promise.all(\n this.overview.revisions\n .filter((row: any) => row.activityInstanceId)\n .map(async (row: any) => {\n try {\n statuses[row.id] = await masterChangeStatus(this, row.activityInstanceId)\n } catch (error) {\n statuses[row.id] = { state: 'unknown', comment: (error as Error).message }\n }\n })\n )\n if (serial === this.serial) this.statuses = statuses\n }\n private get currentSegment() {\n return this.overview?.schedule.find((s: any) => s.state === 'current')\n }\n private get current() {\n return this.overview?.revisions.find((r: any) => r.id === this.currentSegment?.revisionId)\n }\n private get comparisonBase() {\n if (this.draft?.id && (!this.dirty || this.draft.frozenAt))\n return this.overview?.revisions.find((r: any) => r.id === this.draft.baseRevisionId)\n const at = this.draft?.effectiveFrom\n const segment = this.overview?.schedule.find((s: any) => s.validFrom <= at && (!s.validTo || at < s.validTo))\n return this.overview?.revisions.find((r: any) => r.id === segment?.revisionId)\n }\n private stateOf(row: any) {\n const segment = this.overview?.schedule.find((s: any) => s.revisionId === row.id)\n return (\n segment?.state ??\n (row.activityInstanceId ? (this.statuses[row.id]?.state ?? 'unknown') : row.frozenAt ? 'approved' : 'draft')\n )\n }\n private async openRevision(row: any, fork = false) {\n if (!(await this.canLeave())) return\n this.draft = structuredClone(row ?? this.blank())\n if (fork)\n this.draft = {\n ...this.draft,\n id: undefined,\n revisionNumber: undefined,\n frozenAt: undefined,\n activityInstanceId: undefined,\n editGeneration: undefined,\n baseRevisionId: undefined,\n effectiveFrom: new Date().toISOString(),\n reason: ''\n }\n this.dirty = false\n this.message = ''\n await this.updateComplete\n this.renderRoot.querySelector('.editor')?.scrollIntoView({ block: 'start', behavior: 'smooth' })\n }\n private change(field: string, value: any) {\n this.draft = { ...this.draft, [field]: value }\n this.dirty = true\n this.message = ''\n }\n private line(section: string, index: number, field: string, value: string) {\n const rows = this.draft[section].map((row: any) => ({ ...row, limit: { ...row.limit } }))\n const numeric = ['qty', 'minimum', 'maximum'].includes(field)\n const next = numeric ? (value === '' ? undefined : Number(value)) : value\n if (section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field)) rows[index].limit[field] = next\n else rows[index][field] = next\n this.change(section, rows)\n }\n protected async save() {\n await this.run(async () => {\n await this.persist()\n this.message = t('saved')\n })\n }\n private async persist() {\n if (!this.draft || this.draft.frozenAt) return\n const invalid = this.renderRoot.querySelector('input:invalid,textarea:invalid') as HTMLInputElement\n if (invalid) {\n invalid.reportValidity()\n throw new Error(t('required-fields'))\n }\n const { version, description, criteria, inputs, outputs, materialDefinitionName, route, effectiveFrom, reason } =\n this.draft\n const content = this.material\n ? { description, materialClassIds: this.draft.materialClassIds, properties: this.draft.properties, testSpecificationIds: this.draft.testSpecificationIds, effectiveFrom, reason }\n : this.recipe\n ? { description, inputs, outputs, materialDefinitionName, route: route || null, effectiveFrom, reason }\n : { version, description, criteria, effectiveFrom, reason }\n const n = this.names\n const response = this.draft.id\n ? await client.mutate({\n mutation: gql(\n `mutation($id:String!,$generation:Int!,$content:Object!){${n.edit}(revisionId:$id,editGeneration:$generation,content:$content)}`\n ),\n variables: { id: this.draft.id, generation: this.draft.editGeneration, content }\n })\n : await client.mutate({\n mutation: gql(\n `mutation($subject:String,$name:String,$content:Object!){${n.create}(${n.subject}:$subject,name:$name,content:$content)}`\n ),\n variables: { subject: this.overview?.[n.subject], name: this.overview ? undefined : this.newName, content }\n })\n this.assert(response)\n this.draft = response.data[n.edit] ?? response.data[n.create]\n this.dirty = false\n await this.load(this.draft[n.subject])\n await this.grist?.fetch()\n }\n private async submit() {\n await this.run(async () => {\n await this.persist()\n if (!this.draft?.id || this.draft.frozenAt) return\n await this.policy()\n if (this.approvalRequired)\n await requestMasterChangeApproval(this, {\n axis: this.axis,\n revisionId: this.draft.id,\n editGeneration: this.draft.editGeneration\n })\n else {\n const response = await client.mutate({\n mutation: gql(\n `mutation($id:String!,$generation:Int!){${this.names.publish}(revisionId:$id,editGeneration:$generation)}`\n ),\n variables: { id: this.draft.id, generation: this.draft.editGeneration }\n })\n this.assert(response)\n }\n const id = this.draft.id\n await this.load(this.draft[this.names.subject])\n this.draft = this.overview.revisions.find((r: any) => r.id === id)\n await this.grist?.fetch()\n this.message = t(this.approvalRequired ? 'submitted' : 'published')\n })\n }\n private content(row: any, editable = false) {\n if (this.material) return materialRevisionFields(row, editable ? (field, value) => this.change(field, value) : undefined)\n return (this.recipe ? ['inputs', 'outputs'] : ['criteria']).map(section => {\n const fields =\n section === 'criteria'\n ? ['id', 'description', 'evaluatedPropertyId', 'minimum', 'maximum', 'uom', 'expression']\n : section === 'inputs'\n ? ['material', 'qty', 'operation']\n : ['material', 'qty']\n return html`<h3>${t(section)}</h3>\n <div class=\"scroll\">\n <table>\n <thead>\n <tr>\n ${fields.map(field => html`<th>${t(field)}</th>`)}${editable ? html`<th>${t('actions')}</th>` : nothing}\n </tr>\n </thead>\n <tbody>\n ${(row[section] ?? []).map(\n (line: any, index: number) =>\n html`<tr>\n ${fields.map(field => {\n const value =\n section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field)\n ? line.limit?.[field]\n : line[field]\n return html`<td>\n ${editable ? html`<input aria-label=${t(section) + ' ' + (index + 1) + ' ' + t(field)} .value=${String(value ?? '')} type=${['qty', 'minimum', 'maximum'].includes(field) ? 'number' : 'text'} step=\"any\" ?required=${['id', 'material', 'qty', 'evaluatedPropertyId'].includes(field)} @input=${(e: Event) => this.line(section, index, field, (e.target as HTMLInputElement).value)} />` : (value ?? '—')}\n </td>`\n })}${\n editable\n ? html`<td>\n <button\n aria-label=${t('remove-row', { n: index + 1 })}\n @click=${() =>\n this.change(\n section,\n row[section].filter((_: any, i: number) => i !== index)\n )}\n >\n ${t('remove')}\n </button>\n </td>`\n : nothing\n }\n </tr>`\n )}\n </tbody>\n </table>\n </div>\n ${editable ? html`<button @click=${() => this.change(section, [...row[section], section === 'criteria' ? { id: '', description: '', limit: {} } : { lineKey: crypto.randomUUID(), material: '', qty: 1 }])}>${t('add-' + section)}</button>` : nothing}\n ${section === 'criteria' && row.criteria?.some((c: any) => c.expression) ? html`<p class=\"notice\">${t('expression-preserved')}</p>` : nothing}`\n })\n }\n private status(row: any) {\n const state = this.stateOf(row),\n decision = this.statuses[row.id]\n return html`<span class=\"pill\">${t(state)}</span\n >${decision?.who ? html`<span> · ${decision.who}</span>` : ''}${decision?.comment ? html`<p>${decision.comment}</p>` : ''}${decision?.open ? html`<button @click=${() => decision.open!()}>${t('approval-detail')}</button>` : ''}`\n }\n render() {\n const current = this.current\n const next = this.overview?.schedule.filter((s: any) => s.state === 'scheduled') ?? []\n const changes =\n this.overview?.revisions.filter((r: any) => !this.overview.schedule.some((s: any) => s.revisionId === r.id)) ?? []\n const readonly = !!this.draft?.frozenAt || this.busy\n return html` <ox-grist\n ?hidden=${!!this.overview || !!this.draft}\n .mode=${this.mode}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n @select-record-change=${this.pick.bind(this)}\n ></ox-grist>\n ${\n this.overview || this.draft\n ? html`<main class=\"workspace\" aria-busy=${this.busy}>\n <div class=\"bar\">\n <button\n ?disabled=${this.busy}\n @click=${async () => {\n if (await this.canLeave()) {\n this.overview = undefined\n this.draft = undefined\n this.dirty = false\n await this.grist?.fetch()\n }\n }}\n >\n ${t('back-list')}\n </button>\n <h2>${this.overview?.name ?? t(this.material ? 'new-material' : this.recipe ? 'new-recipe' : 'new-spec')}</h2>\n ${\n this.overview\n ? html`<button\n ?disabled=${this.busy}\n @click=${() =>\n this.run(async () => {\n this.message = ''\n await this.load(this.overview[this.names.subject])\n await this.grist?.fetch()\n })}\n >\n ${t('refresh')}</button\n ><button\n class=\"primary\"\n ?disabled=${this.busy}\n @click=${() => this.openRevision(current, true)}\n >\n ${t('create-change')}\n </button>`\n : ''\n }\n </div>\n ${\n this.overview\n ? html`<div class=\"summary\">\n <section class=\"card current\">\n <h3>${t('current')}</h3>\n ${\n current\n ? html`<strong>${t('revision-value', { n: current.revisionNumber })}</strong>\n <p>\n ${date(this.currentSegment.validFrom)} →\n ${this.currentSegment.validTo ? date(this.currentSegment.validTo) : t('until-change')}\n </p>\n <button @click=${() => this.openRevision(current)}>${t('view-current')}</button>`\n : html`<p>${t('no-current')}</p>`\n }\n </section>\n <section class=\"card\">\n <h3>${t('changes-in-progress')} · ${changes.length}</h3>\n ${changes.length ? changes.map((row: any) => html`<p><button @click=${() => this.openRevision(row)}>${t('revision-value', { n: row.revisionNumber })}</button> ${this.status(row)}</p>`) : html`<p class=\"muted\">${t('no-drafts')}</p>`}\n </section>\n <section class=\"card\">\n <h3>${t('scheduled')}</h3>\n ${\n next.length\n ? next.map((segment: any) => {\n const row = this.overview.revisions.find((r: any) => r.id === segment.revisionId)\n return html`<p>\n <button @click=${() => this.openRevision(row)}>\n ${t('revision-value', { n: row.revisionNumber })}\n </button>\n · ${date(segment.validFrom)}\n </p>`\n })\n : html`<p class=\"muted\">${t('no-scheduled')}</p>`\n }\n </section>\n </div>\n ${\n !this.draft && current\n ? html`<h3>${t('current-content')}</h3>\n <p>${current.description}</p>\n ${this.content(current)}`\n : ''\n }\n <details>\n <summary>${t('history')}</summary>\n <table>\n <thead>\n <tr>\n <th>${t('revision')}</th>\n <th>${t('state')}</th>\n <th>${t('effectiveFrom')}</th>\n <th>${t('reason')}</th>\n </tr>\n </thead>\n <tbody>\n ${[...this.overview.revisions].reverse().map(\n (row: any) =>\n html`<tr>\n <td><button @click=${() => this.openRevision(row)}>${row.revisionNumber}</button></td>\n <td>${this.status(row)}</td>\n <td>${date(row.effectiveFrom)}</td>\n <td>${row.reason}</td>\n </tr>`\n )}\n </tbody>\n </table>\n </details>`\n : ''\n }\n ${\n this.draft\n ? html`<section class=\"editor\">\n <div class=\"bar\">\n <h3>\n ${this.draft.id ? t('revision-value', { n: this.draft.revisionNumber }) : t('new-change')}\n </h3>\n ${this.draft.id ? this.status(this.draft) : ''}<button\n ?disabled=${this.busy}\n @click=${async () => {\n if (await this.canLeave()) {\n this.draft = undefined\n this.dirty = false\n }\n }}\n >\n ${t('close-editor')}\n </button>\n </div>\n <p class=\"notice\">${t(this.material ? 'material-impact' : this.recipe ? 'recipe-impact' : 'spec-impact')}</p>\n <div class=\"fields\">\n ${\n !this.overview\n ? html`<label\n >${t('name')}<input\n required\n .value=${this.newName}\n @input=${(e: Event) => {\n this.newName = (e.target as HTMLInputElement).value\n this.dirty = true\n }}\n /></label>`\n : ''\n }\n ${['description', ...(this.material ? [] : this.recipe ? ['materialDefinitionName', 'route'] : ['version'])].map(field => html`<label>${t(field)}<input ?disabled=${readonly} ?required=${field === 'materialDefinitionName' || field === 'version'} .value=${this.draft[field] ?? ''} @input=${(e: Event) => this.change(field, (e.target as HTMLInputElement).value)} /></label>`)}\n <label\n >${t('effectiveFrom')}<input\n type=\"datetime-local\"\n required\n ?disabled=${readonly}\n .value=${localDateTime(this.draft.effectiveFrom)}\n @change=${(e: Event) => {\n try {\n this.change('effectiveFrom', isoFromLocal((e.target as HTMLInputElement).value))\n } catch {\n this.failure = t('invalid-date')\n }\n }}\n /><span class=\"muted hint\"\n >${t('time-zone')} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</span\n ></label\n >\n <label\n >${t('reason')}<textarea\n required\n ?disabled=${readonly}\n .value=${this.draft.reason ?? ''}\n @input=${(e: Event) => this.change('reason', (e.target as HTMLTextAreaElement).value)}\n ></textarea>\n </label>\n </div>\n ${this.content(this.draft, !readonly)}\n <ops-master-revision-comparison\n .axis=${this.axis}\n .before=${this.comparisonBase}\n .after=${this.draft}\n ></ops-master-revision-comparison>\n <div class=\"actions\">\n ${this.draft.frozenAt ? html`<button ?disabled=${this.busy} @click=${() => this.openRevision(this.draft, true)}>${t('create-change')}</button>` : html`<button ?disabled=${this.busy} @click=${() => this.save()}>${t('save-draft')}</button>`}${this.dirty ? html`<span>${t('unsaved')}</span>` : ''}\n </div>\n </section>`\n : ''\n }\n ${this.message ? html`<p role=\"status\" class=\"notice\">${this.message}</p>` : ''}${this.failure ? html`<p role=\"alert\" class=\"failure\">${this.failure}</p>` : ''}\n </main>`\n : this.failure\n ? html`<p role=\"alert\" class=\"failure\">${this.failure}</p>`\n : nothing\n }`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"revision-workspace.js","sourceRoot":"","sources":["../../../client/pages/master/revision-workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist/ox-grist.js'\nimport gql from 'graphql-tag'\nimport { html, css, nothing } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { OxPrompt } from '@operato/popup'\nimport { IDENTITY, MasterPageBase, MasterSpec } from './master-page-base.js'\nimport { requestMasterChangeApproval, masterChangeStatus, MasterChangeStatus } from '../../master-change-approval.js'\nimport { revisionText as t, revisionDate as date, revisionStyles } from './revision-comparison.js'\nimport { materialRevisionFields } from './material-revision-fields.js'\nimport { RevisionAxis, localDateTime, isoFromLocal } from './revision-view.js'\n\n/** Shared workflow, not shared domain payload. Both consumers keep their existing page/URL identities. */\nexport abstract class RevisionWorkspace extends MasterPageBase {\n protected abstract axis: RevisionAxis\n static styles = [\n ...MasterPageBase.styles,\n revisionStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n min-height: 0;\n }\n ox-grist {\n flex: 1;\n min-height: 240px;\n }\n ox-grist[hidden] {\n display: none;\n }\n .workspace {\n overflow: auto;\n flex: 1;\n padding: 20px 24px;\n }\n .bar {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n .bar h2 {\n margin: 8px 0;\n font-size: var(--ui-t-title, 20px);\n flex: 1;\n overflow-wrap: anywhere;\n }\n .summary {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));\n gap: 16px;\n margin: 20px 0;\n }\n .card {\n padding: 16px;\n border: 1px solid var(--ui-line);\n border-radius: 6px;\n background: var(--md-sys-color-surface);\n }\n .card h3 {\n margin: 0 0 10px;\n }\n .card p {\n margin: 8px 0;\n }\n .current {\n border-inline-start: 4px solid var(--md-sys-color-primary);\n }\n .fields {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n gap: 16px;\n margin: 16px 0;\n }\n label {\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: var(--ui-t-small, 13px);\n }\n input,\n textarea {\n box-sizing: border-box;\n width: 100%;\n padding: 8px;\n border: 1px solid var(--ui-line);\n border-radius: 4px;\n font: inherit;\n background: var(--md-sys-color-surface);\n color: inherit;\n }\n td input {\n min-width: 100px;\n }\n textarea {\n min-height: 70px;\n }\n .actions {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 20px;\n align-items: center;\n }\n .notice {\n padding: 12px;\n background: var(--md-sys-color-surface-container);\n border-radius: 4px;\n }\n .failure {\n padding: 12px;\n border-inline-start: 4px solid var(--md-sys-color-error);\n color: var(--md-sys-color-error);\n }\n .empty {\n padding: 24px;\n }\n .hint {\n font-size: var(--ui-t-small, 13px);\n }\n .editor {\n border-top: 1px solid var(--ui-line);\n margin-top: 20px;\n padding-top: 12px;\n }\n @media (max-width: 700px) {\n .workspace {\n padding: 12px;\n }\n .summary {\n grid-template-columns: 1fr;\n }\n .fields {\n grid-template-columns: 1fr;\n }\n }\n `\n ]\n @state() private overview: any\n @state() private draft: any\n @state() private newName = ''\n @state() private busy = false\n @state() private dirty = false\n @state() private failure = ''\n @state() private message = ''\n @state() private approvalRequired: boolean | undefined\n @state() private statuses: Record<string, MasterChangeStatus> = {}\n private serial = 0\n private get recipe() {\n return this.axis === 'recipeDefinition'\n }\n private get material() { return this.axis === 'materialDefinition' }\n private get names() {\n if (this.material) return { noun: 'material', list: 'materialDefinitions', overview: 'materialDefinitionRevisions', subject: 'materialId', create: 'createMaterialDefinitionDraft', edit: 'editMaterialDefinitionDraft', publish: 'publishMaterialDefinitionDraft' }\n return this.recipe\n ? {\n noun: 'recipe',\n list: 'recipeDefinitions',\n overview: 'recipeRevisions',\n subject: 'recipeId',\n create: 'createRecipeDraft',\n edit: 'editRecipeDraft',\n publish: 'publishRecipeDraft'\n }\n : {\n noun: 'spec',\n list: 'testSpecifications',\n overview: 'testSpecificationRevisions',\n subject: 'specId',\n create: 'createTestSpecificationDraft',\n edit: 'editTestSpecificationDraft',\n publish: 'publishTestSpecificationDraft'\n }\n }\n protected get spec(): MasterSpec {\n return {\n key: this.axis,\n title: this.material ? 'material' : this.recipe ? 'recipe' : 'test-specification',\n help: 'ops-master/' + (this.material ? 'material-definition' : this.recipe ? 'recipe-definition' : 'test-specification'),\n query: this.names.list,\n mutation: this.material ? 'updateMultipleMaterialDefinition' : this.recipe ? 'updateMultipleRecipeDefinition' : 'updateMultipleTestSpecification',\n columns: [\n ...IDENTITY,\n ...(this.material ? [\n { name: 'rootClasses', label: 'material-type', type: 'list' as const, width: 120 },\n { name: 'classPath', label: 'class-lineage', type: 'list' as const, width: 180 },\n { name: 'madeBy', label: 'made-by', type: 'list' as const, width: 180 },\n { name: 'usedIn', label: 'used-in', type: 'list' as const, width: 180 }\n ] : []),\n { name: 'revisionNumber', label: 'revision', type: 'number' as const },\n { name: 'effectiveStart', label: 'effective-start', type: 'date' as const }\n ].map(column => ({ ...column, readonly: true }))\n }\n }\n protected get pathSegmentNarrowsList() {\n return false\n }\n get context(): any {\n return {\n ...super.context,\n importable: undefined,\n exportable: this.overview || this.draft ? undefined : super.context.exportable,\n search: this.overview || this.draft ? undefined : super.context.search,\n description: t('purpose'),\n actions:\n this.draft && !this.draft.frozenAt\n ? [\n {\n title: this.approvalRequired ? t('request-approval') : i18next.t('button.save'),\n icon: 'done',\n emphasis: { raised: true },\n disabled: this.busy || this.approvalRequired === undefined,\n action: () => this.submit()\n }\n ]\n : this.overview || this.draft\n ? []\n : [\n {\n title: t(this.material ? 'new-material' : this.recipe ? 'new-recipe' : 'new-spec'),\n icon: 'add',\n emphasis: { raised: true },\n action: () => this.startNew()\n }\n ]\n }\n }\n updated(changes: any) {\n super.updated(changes)\n if (this.active && ['overview', 'draft', 'busy', 'approvalRequired'].some(key => changes.has(key)))\n this.updateContext()\n }\n protected configOf() {\n const config = super.configOf()\n return { ...config, rows: { ...config.rows, appendable: false, selectable: { multiple: false } } }\n }\n async pageInitialized() {\n await super.pageInitialized()\n await this.openResource(this.lifecycle?.resourceId)\n }\n async pageUpdated(changes: any, after: any, before: any) {\n await super.pageUpdated()\n if (after?.resourceId !== before?.resourceId) await this.openResource(after?.resourceId)\n }\n private async openResource(key?: string) {\n if (!key) return\n await this.run(async () => {\n const response = await client.query({\n query: gql(`query($filters:[Filter!]){${this.names.list}(filters:$filters){items{id}}}`),\n variables: { filters: [{ name: 'name', operator: 'eq', value: key }] },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n const row = response.data[this.names.list].items[0]\n if (row) await this.load(row.id)\n })\n }\n private assert(response: any) {\n if (response.errors?.length) throw new Error(response.errors.map((e: any) => e.message).join('\\n'))\n if (!response.data) throw new Error(t('no-response'))\n }\n private async run(work: () => Promise<void>) {\n if (this.busy) return\n this.busy = true\n this.failure = ''\n try {\n await work()\n } catch (error) {\n this.failure = (error as Error).message\n } finally {\n this.busy = false\n }\n }\n private async canLeave() {\n return (\n !this.dirty ||\n !!(await OxPrompt.open({\n title: t('unsaved'),\n text: t('discard-question'),\n confirmButton: { text: t('discard') },\n cancelButton: { text: t('keep-editing') }\n }))\n )\n }\n private blank() {\n return {\n version: '1',\n description: '',\n materialDefinitionName: '',\n effectiveFrom: new Date().toISOString(),\n reason: '',\n materialClassIds: [], properties: [], testSpecificationIds: [],\n criteria: [],\n inputs: [],\n outputs: []\n }\n }\n private async policy() {\n const response = await client.query({\n query: gql`\n query ($axis: String!) {\n masterChangePolicy(axis: $axis)\n }\n `,\n variables: { axis: this.axis },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n this.approvalRequired = response.data.masterChangePolicy.approvalRequired\n }\n private async startNew() {\n if (!(await this.canLeave())) return\n await this.run(async () => {\n ++this.serial\n this.overview = undefined\n this.draft = this.blank()\n this.newName = ''\n this.dirty = false\n this.message = ''\n await this.policy()\n })\n }\n private async pick(event: CustomEvent) {\n const row = event.detail?.records?.[0] ?? event.detail?.added?.[0]\n if (!row?.id || !(await this.canLeave())) return\n await this.run(async () => {\n this.draft = undefined\n this.dirty = false\n this.message = ''\n await this.load(row.id)\n })\n }\n private async load(id: string) {\n const serial = ++this.serial\n const response = await client.query({\n query: gql(`query($id:String!){${this.names.overview}(${this.names.subject}:$id)}`),\n variables: { id },\n fetchPolicy: 'no-cache'\n })\n this.assert(response)\n if (serial !== this.serial) return\n this.overview = response.data[this.names.overview]\n await this.policy()\n const statuses: Record<string, MasterChangeStatus> = {}\n await Promise.all(\n this.overview.revisions\n .filter((row: any) => row.activityInstanceId)\n .map(async (row: any) => {\n try {\n statuses[row.id] = await masterChangeStatus(this, row.activityInstanceId)\n } catch (error) {\n statuses[row.id] = { state: 'unknown', comment: (error as Error).message }\n }\n })\n )\n if (serial === this.serial) this.statuses = statuses\n }\n private get currentSegment() {\n return this.overview?.schedule.find((s: any) => s.state === 'current')\n }\n private get current() {\n return this.overview?.revisions.find((r: any) => r.id === this.currentSegment?.revisionId)\n }\n private get comparisonBase() {\n if (this.draft?.id && (!this.dirty || this.draft.frozenAt))\n return this.overview?.revisions.find((r: any) => r.id === this.draft.baseRevisionId)\n const at = this.draft?.effectiveFrom\n const segment = this.overview?.schedule.find((s: any) => s.validFrom <= at && (!s.validTo || at < s.validTo))\n return this.overview?.revisions.find((r: any) => r.id === segment?.revisionId)\n }\n private stateOf(row: any) {\n const segment = this.overview?.schedule.find((s: any) => s.revisionId === row.id)\n return (\n segment?.state ??\n (row.activityInstanceId ? (this.statuses[row.id]?.state ?? 'unknown') : row.frozenAt ? 'approved' : 'draft')\n )\n }\n private async openRevision(row: any, fork = false) {\n if (!(await this.canLeave())) return\n this.draft = structuredClone(row ?? this.blank())\n if (fork)\n this.draft = {\n ...this.draft,\n id: undefined,\n revisionNumber: undefined,\n frozenAt: undefined,\n activityInstanceId: undefined,\n editGeneration: undefined,\n baseRevisionId: undefined,\n effectiveFrom: new Date().toISOString(),\n reason: ''\n }\n this.dirty = false\n this.message = ''\n await this.updateComplete\n this.renderRoot.querySelector('.editor')?.scrollIntoView({ block: 'start', behavior: 'smooth' })\n }\n private change(field: string, value: any) {\n this.draft = { ...this.draft, [field]: value }\n this.dirty = true\n this.message = ''\n }\n private line(section: string, index: number, field: string, value: string) {\n const rows = this.draft[section].map((row: any) => ({ ...row, limit: { ...row.limit } }))\n const numeric = ['qty', 'minimum', 'maximum'].includes(field)\n const next = numeric ? (value === '' ? undefined : Number(value)) : value\n if (section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field)) rows[index].limit[field] = next\n else rows[index][field] = next\n this.change(section, rows)\n }\n protected async save() {\n await this.run(async () => {\n await this.persist()\n this.message = t('saved')\n })\n }\n private async persist(publish = false) {\n if (!this.draft || this.draft.frozenAt) return\n const invalid = this.renderRoot.querySelector('input:invalid,textarea:invalid') as HTMLInputElement\n if (invalid) {\n invalid.reportValidity()\n throw new Error(t('required-fields'))\n }\n const { version, description, criteria, inputs, outputs, materialDefinitionName, route, effectiveFrom, reason } =\n this.draft\n const content = this.material\n ? { description, materialClassIds: this.draft.materialClassIds, properties: this.draft.properties, testSpecificationIds: this.draft.testSpecificationIds, effectiveFrom, reason }\n : this.recipe\n ? { description, inputs, outputs, materialDefinitionName, route: route || null, effectiveFrom, reason }\n : { version, description, criteria, effectiveFrom, reason }\n const n = this.names\n const saveOnce = this.material ? 'saveAndPublishMaterialDefinition' : this.recipe ? 'saveAndPublishRecipe' : 'saveAndPublishTestSpecification'\n const response = publish\n ? await client.mutate({\n mutation: gql(`mutation($subject:String,$name:String,$revisionId:String,$editGeneration:Int,$content:Object!){${saveOnce}(${n.subject}:$subject,name:$name,revisionId:$revisionId,editGeneration:$editGeneration,content:$content)}`),\n variables: { subject: this.overview?.[n.subject], name: this.overview ? undefined : this.newName,\n revisionId: this.draft.id, editGeneration: this.draft.editGeneration, content }\n })\n : this.draft.id\n ? await client.mutate({\n mutation: gql(\n `mutation($id:String!,$generation:Int!,$content:Object!){${n.edit}(revisionId:$id,editGeneration:$generation,content:$content)}`\n ),\n variables: { id: this.draft.id, generation: this.draft.editGeneration, content }\n })\n : await client.mutate({\n mutation: gql(\n `mutation($subject:String,$name:String,$content:Object!){${n.create}(${n.subject}:$subject,name:$name,content:$content)}`\n ),\n variables: { subject: this.overview?.[n.subject], name: this.overview ? undefined : this.newName, content }\n })\n this.assert(response)\n this.draft = publish ? response.data[saveOnce].revision : response.data[n.edit] ?? response.data[n.create]\n this.dirty = false\n await this.load(this.draft[n.subject])\n await this.grist?.fetch()\n }\n private async submit() {\n await this.run(async () => {\n if (!this.draft || this.draft.frozenAt) return\n await this.policy()\n if (!this.approvalRequired) {\n await this.persist(true)\n this.message = t('published')\n return\n }\n await this.persist()\n if (!this.draft?.id || this.draft.frozenAt) return\n await requestMasterChangeApproval(this, {\n axis: this.axis,\n revisionId: this.draft.id,\n editGeneration: this.draft.editGeneration\n })\n const id = this.draft.id\n await this.load(this.draft[this.names.subject])\n this.draft = this.overview.revisions.find((r: any) => r.id === id)\n await this.grist?.fetch()\n this.message = t('submitted')\n })\n }\n private content(row: any, editable = false) {\n if (this.material) return materialRevisionFields(row, editable ? (field, value) => this.change(field, value) : undefined)\n return (this.recipe ? ['inputs', 'outputs'] : ['criteria']).map(section => {\n const fields =\n section === 'criteria'\n ? ['id', 'description', 'evaluatedPropertyId', 'minimum', 'maximum', 'uom', 'expression']\n : section === 'inputs'\n ? ['material', 'qty', 'operation']\n : ['material', 'qty']\n return html`<h3>${t(section)}</h3>\n <div class=\"scroll\">\n <table>\n <thead>\n <tr>\n ${fields.map(field => html`<th>${t(field)}</th>`)}${editable ? html`<th>${t('actions')}</th>` : nothing}\n </tr>\n </thead>\n <tbody>\n ${(row[section] ?? []).map(\n (line: any, index: number) =>\n html`<tr>\n ${fields.map(field => {\n const value =\n section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field)\n ? line.limit?.[field]\n : line[field]\n return html`<td>\n ${editable ? html`<input aria-label=${t(section) + ' ' + (index + 1) + ' ' + t(field)} .value=${String(value ?? '')} type=${['qty', 'minimum', 'maximum'].includes(field) ? 'number' : 'text'} step=\"any\" ?required=${['id', 'material', 'qty', 'evaluatedPropertyId'].includes(field)} @input=${(e: Event) => this.line(section, index, field, (e.target as HTMLInputElement).value)} />` : (value ?? '—')}\n </td>`\n })}${\n editable\n ? html`<td>\n <button\n aria-label=${t('remove-row', { n: index + 1 })}\n @click=${() =>\n this.change(\n section,\n row[section].filter((_: any, i: number) => i !== index)\n )}\n >\n ${t('remove')}\n </button>\n </td>`\n : nothing\n }\n </tr>`\n )}\n </tbody>\n </table>\n </div>\n ${editable ? html`<button @click=${() => this.change(section, [...row[section], section === 'criteria' ? { id: '', description: '', limit: {} } : { lineKey: crypto.randomUUID(), material: '', qty: 1 }])}>${t('add-' + section)}</button>` : nothing}\n ${section === 'criteria' && row.criteria?.some((c: any) => c.expression) ? html`<p class=\"notice\">${t('expression-preserved')}</p>` : nothing}`\n })\n }\n private status(row: any) {\n const state = this.stateOf(row),\n decision = this.statuses[row.id]\n return html`<span class=\"pill\">${t(state)}</span\n >${decision?.who ? html`<span> · ${decision.who}</span>` : ''}${decision?.comment ? html`<p>${decision.comment}</p>` : ''}${decision?.open ? html`<button @click=${() => decision.open!()}>${t('approval-detail')}</button>` : ''}`\n }\n render() {\n const current = this.current\n const next = this.overview?.schedule.filter((s: any) => s.state === 'scheduled') ?? []\n const changes =\n this.overview?.revisions.filter((r: any) => !this.overview.schedule.some((s: any) => s.revisionId === r.id)) ?? []\n const readonly = !!this.draft?.frozenAt || this.busy\n return html` <ox-grist\n ?hidden=${!!this.overview || !!this.draft}\n .mode=${this.mode}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n @select-record-change=${this.pick.bind(this)}\n ></ox-grist>\n ${\n this.overview || this.draft\n ? html`<main class=\"workspace\" aria-busy=${this.busy}>\n <div class=\"bar\">\n <button\n ?disabled=${this.busy}\n @click=${async () => {\n if (await this.canLeave()) {\n this.overview = undefined\n this.draft = undefined\n this.dirty = false\n await this.grist?.fetch()\n }\n }}\n >\n ${t('back-list')}\n </button>\n <h2>${this.overview?.name ?? t(this.material ? 'new-material' : this.recipe ? 'new-recipe' : 'new-spec')}</h2>\n ${\n this.overview\n ? html`<button\n ?disabled=${this.busy}\n @click=${() =>\n this.run(async () => {\n this.message = ''\n await this.load(this.overview[this.names.subject])\n await this.grist?.fetch()\n })}\n >\n ${t('refresh')}</button\n ><button\n class=\"primary\"\n ?disabled=${this.busy}\n @click=${() => this.openRevision(current, true)}\n >\n ${t('create-change')}\n </button>`\n : ''\n }\n </div>\n ${\n this.overview\n ? html`<div class=\"summary\">\n <section class=\"card current\">\n <h3>${t('current')}</h3>\n ${\n current\n ? html`<strong>${t('revision-value', { n: current.revisionNumber })}</strong>\n <p>\n ${date(this.currentSegment.validFrom)} →\n ${this.currentSegment.validTo ? date(this.currentSegment.validTo) : t('until-change')}\n </p>\n <button @click=${() => this.openRevision(current)}>${t('view-current')}</button>`\n : html`<p>${t('no-current')}</p>`\n }\n </section>\n <section class=\"card\">\n <h3>${t('changes-in-progress')} · ${changes.length}</h3>\n ${changes.length ? changes.map((row: any) => html`<p><button @click=${() => this.openRevision(row)}>${t('revision-value', { n: row.revisionNumber })}</button> ${this.status(row)}</p>`) : html`<p class=\"muted\">${t('no-drafts')}</p>`}\n </section>\n <section class=\"card\">\n <h3>${t('scheduled')}</h3>\n ${\n next.length\n ? next.map((segment: any) => {\n const row = this.overview.revisions.find((r: any) => r.id === segment.revisionId)\n return html`<p>\n <button @click=${() => this.openRevision(row)}>\n ${t('revision-value', { n: row.revisionNumber })}\n </button>\n · ${date(segment.validFrom)}\n </p>`\n })\n : html`<p class=\"muted\">${t('no-scheduled')}</p>`\n }\n </section>\n </div>\n ${\n !this.draft && current\n ? html`<h3>${t('current-content')}</h3>\n <p>${current.description}</p>\n ${this.content(current)}`\n : ''\n }\n <details>\n <summary>${t('history')}</summary>\n <table>\n <thead>\n <tr>\n <th>${t('revision')}</th>\n <th>${t('state')}</th>\n <th>${t('effectiveFrom')}</th>\n <th>${t('reason')}</th>\n </tr>\n </thead>\n <tbody>\n ${[...this.overview.revisions].reverse().map(\n (row: any) =>\n html`<tr>\n <td><button @click=${() => this.openRevision(row)}>${row.revisionNumber}</button></td>\n <td>${this.status(row)}</td>\n <td>${date(row.effectiveFrom)}</td>\n <td>${row.reason}</td>\n </tr>`\n )}\n </tbody>\n </table>\n </details>`\n : ''\n }\n ${\n this.draft\n ? html`<section class=\"editor\">\n <div class=\"bar\">\n <h3>\n ${this.draft.id ? t('revision-value', { n: this.draft.revisionNumber }) : t('new-change')}\n </h3>\n ${this.draft.id ? this.status(this.draft) : ''}<button\n ?disabled=${this.busy}\n @click=${async () => {\n if (await this.canLeave()) {\n this.draft = undefined\n this.dirty = false\n }\n }}\n >\n ${t('close-editor')}\n </button>\n </div>\n <p class=\"notice\">${t(this.material ? 'material-impact' : this.recipe ? 'recipe-impact' : 'spec-impact')}</p>\n <div class=\"fields\">\n ${\n !this.overview\n ? html`<label\n >${t('name')}<input\n required\n .value=${this.newName}\n @input=${(e: Event) => {\n this.newName = (e.target as HTMLInputElement).value\n this.dirty = true\n }}\n /></label>`\n : ''\n }\n ${['description', ...(this.material ? [] : this.recipe ? ['materialDefinitionName', 'route'] : ['version'])].map(field => html`<label>${t(field)}<input ?disabled=${readonly} ?required=${field === 'materialDefinitionName' || field === 'version'} .value=${this.draft[field] ?? ''} @input=${(e: Event) => this.change(field, (e.target as HTMLInputElement).value)} /></label>`)}\n <label\n >${t('effectiveFrom')}<input\n type=\"datetime-local\"\n required\n ?disabled=${readonly}\n .value=${localDateTime(this.draft.effectiveFrom)}\n @change=${(e: Event) => {\n try {\n this.change('effectiveFrom', isoFromLocal((e.target as HTMLInputElement).value))\n } catch {\n this.failure = t('invalid-date')\n }\n }}\n /><span class=\"muted hint\"\n >${t('time-zone')} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</span\n ></label\n >\n <label\n >${t('reason')}<textarea\n required\n ?disabled=${readonly}\n .value=${this.draft.reason ?? ''}\n @input=${(e: Event) => this.change('reason', (e.target as HTMLTextAreaElement).value)}\n ></textarea>\n </label>\n </div>\n ${this.content(this.draft, !readonly)}\n <ops-master-revision-comparison\n .axis=${this.axis}\n .before=${this.comparisonBase}\n .after=${this.draft}\n ></ops-master-revision-comparison>\n <div class=\"actions\">\n ${this.draft.frozenAt ? html`<button ?disabled=${this.busy} @click=${() => this.openRevision(this.draft, true)}>${t('create-change')}</button>` : html`<button ?disabled=${this.busy} @click=${() => this.save()}>${t('save-draft')}</button>`}${this.dirty ? html`<span>${t('unsaved')}</span>` : ''}\n </div>\n </section>`\n : ''\n }\n ${this.message ? html`<p role=\"status\" class=\"notice\">${this.message}</p>` : ''}${this.failure ? html`<p role=\"alert\" class=\"failure\">${this.failure}</p>` : ''}\n </main>`\n : this.failure\n ? html`<p role=\"alert\" class=\"failure\">${this.failure}</p>`\n : nothing\n }`\n }\n}\n"]}
|