@things-factory/ops-master 10.1.178 → 10.1.181
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.
|
@@ -24,6 +24,7 @@ export declare class MasterRevisionReview extends MasterRevisionReview_base {
|
|
|
24
24
|
private static enabled;
|
|
25
25
|
private static detailPath;
|
|
26
26
|
private static detailRevision;
|
|
27
|
+
private static stopAddress?;
|
|
27
28
|
private static onAddress;
|
|
28
29
|
connectedCallback(): void;
|
|
29
30
|
disconnectedCallback(): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
var MasterRevisionReview_1;
|
|
2
2
|
import { __decorate, __metadata } from "tslib";
|
|
3
|
+
import { addressController, writeAddress } from '@operato/utils/address.js';
|
|
3
4
|
import { materialRevisionFields } from './material-revision-fields.js';
|
|
4
5
|
import { LitElement, html, css } from 'lit';
|
|
5
6
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
@@ -218,7 +219,7 @@ let MasterRevisionReview = class MasterRevisionReview extends localize(i18next)(
|
|
|
218
219
|
super.connectedCallback();
|
|
219
220
|
MasterRevisionReview_1.activeReview = this;
|
|
220
221
|
// One provider listener, not one view listener: routing may disconnect a view during dispatch.
|
|
221
|
-
|
|
222
|
+
MasterRevisionReview_1.stopAddress ??= addressController().subscribe(MasterRevisionReview_1.onAddress, false);
|
|
222
223
|
}
|
|
223
224
|
disconnectedCallback() {
|
|
224
225
|
if (MasterRevisionReview_1.activeReview === this)
|
|
@@ -263,12 +264,13 @@ let MasterRevisionReview = class MasterRevisionReview extends localize(i18next)(
|
|
|
263
264
|
this.detailError = revisionText('detail-unavailable');
|
|
264
265
|
}
|
|
265
266
|
}
|
|
266
|
-
closeDetail() {
|
|
267
|
+
async closeDetail() {
|
|
267
268
|
const url = new URL(location.href);
|
|
268
269
|
url.searchParams.delete('f');
|
|
269
270
|
url.searchParams.delete('revision');
|
|
270
271
|
const { entity360Previous: _previous, ...state } = history.state ?? {};
|
|
271
|
-
|
|
272
|
+
if (!(await writeAddress(url, { state, replace: true })))
|
|
273
|
+
return;
|
|
272
274
|
hideEntity360(MasterRevisionReview_1.dockOwner);
|
|
273
275
|
}
|
|
274
276
|
showDetail(side, opener) {
|
|
@@ -288,7 +290,7 @@ let MasterRevisionReview = class MasterRevisionReview extends localize(i18next)(
|
|
|
288
290
|
target?.focus({ preventScroll: true });
|
|
289
291
|
});
|
|
290
292
|
}
|
|
291
|
-
openDetail(side, opener) {
|
|
293
|
+
async openDetail(side, opener) {
|
|
292
294
|
try {
|
|
293
295
|
const address = revisionDetailAddress(this.input, side, location.href);
|
|
294
296
|
this.detailError = '';
|
|
@@ -297,12 +299,14 @@ let MasterRevisionReview = class MasterRevisionReview extends localize(i18next)(
|
|
|
297
299
|
base.searchParams.delete('f');
|
|
298
300
|
base.searchParams.delete('revision');
|
|
299
301
|
const { entity360Previous: _previous, ...state } = history.state ?? {};
|
|
300
|
-
|
|
302
|
+
if (!(await writeAddress(base, { state, replace: true })))
|
|
303
|
+
return;
|
|
301
304
|
}
|
|
305
|
+
if (!(await navigateEntity360(address)))
|
|
306
|
+
return;
|
|
302
307
|
MasterRevisionReview_1.enabled = true;
|
|
303
308
|
MasterRevisionReview_1.detailPath = location.pathname;
|
|
304
309
|
MasterRevisionReview_1.detailRevision = this.input.after.detail.revisionId;
|
|
305
|
-
navigateEntity360(address);
|
|
306
310
|
this.showDetail(side, opener);
|
|
307
311
|
}
|
|
308
312
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revision-comparison.js","sourceRoot":"","sources":["../../../client/pages/master/revision-comparison.ts"],"names":[],"mappings":"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","sourcesContent":["import { materialRevisionFields } from './material-revision-fields.js'\nimport { LitElement, html, css } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { showEntity360, hideEntity360, navigateEntity360, canGoBackEntity360 } from '@operato/layout'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport {\n revisionDifferences,\n RevisionAxis,\n RevisionSide,\n revisionDetailAddress,\n revisionSideAt\n} from './revision-view.js'\n\nexport const revisionText = (key: string, params: any = {}): string => String(i18next.t('revision-ui.' + key, params))\nexport const revisionDate = (value?: string) =>\n value\n ? new Intl.DateTimeFormat(i18next.language || 'en', { dateStyle: 'medium', timeStyle: 'short' }).format(\n new Date(value)\n )\n : '—'\nexport const revisionStyles = css`\n .material-property { border: 1px solid var(--ui-line, #ddd); margin: 12px 0; padding: 12px; min-width: 0; }\n .material-property legend { font-weight: 600; padding: 0 6px; }\n .material-property-values { display: grid; grid-template-columns: minmax(70px, 1fr) minmax(0, 3fr); gap: 8px; }\n .material-property-values dt { color: var(--md-sys-color-on-surface-variant); }\n .material-property-values dd { margin: 0; overflow-wrap: anywhere; }\n :host {\n color: var(--md-sys-color-on-surface);\n font: inherit;\n }\n table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--ui-t-small, 13px);\n }\n th,\n td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--ui-line);\n text-align: left;\n vertical-align: top;\n overflow-wrap: anywhere;\n }\n th {\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 600;\n }\n .scroll {\n overflow: auto;\n }\n .muted {\n color: var(--md-sys-color-on-surface-variant);\n }\n .pill {\n display: inline-block;\n padding: 3px 8px;\n border-radius: 4px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n }\n .before {\n color: var(--md-sys-color-on-surface-variant);\n }\n .after {\n font-weight: 600;\n }\n h3 {\n font-size: var(--ui-t-title, 16px);\n margin: 16px 0 10px;\n }\n button {\n font: inherit;\n min-height: var(--form-action-height, 32px);\n padding: 4px 12px;\n border: 1px solid var(--ui-line);\n border-radius: 4px;\n color: inherit;\n background: var(--md-sys-color-surface);\n cursor: pointer;\n }\n button.primary {\n background: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n border-color: transparent;\n }\n button:disabled {\n opacity: 0.5;\n cursor: default;\n }\n button:focus-visible,\n a:focus-visible,\n input:focus-visible,\n textarea:focus-visible,\n select:focus-visible,\n summary:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 3px;\n }\n details {\n margin: 12px 0;\n }\n summary {\n cursor: pointer;\n padding: 8px 0;\n }\n`\n@customElement('ops-master-revision-comparison')\nexport class MasterRevisionComparison extends localize(i18next)(LitElement) {\n static styles = [ScrollbarStyles, revisionStyles]\n @property() axis: RevisionAxis = 'testSpecification'\n @property({ attribute: false }) before: any\n @property({ attribute: false }) after: any\n private display(field: string, value: unknown) {\n if (value === undefined || value === null) return '—'\n if (this.axis === 'workShift') {\n if (field === 'fromDate' || field === 'toDate') return revisionText('day-offset-' + value)\n if (field === 'daysOfWeek') return String(value).split(',').map(day => revisionText('weekday-' + day)).join(', ')\n }\n return value\n }\n render() {\n const changes = revisionDifferences(this.axis, this.before, this.after)\n return html`<h3>\n ${revisionText('changes')} <span class=\"pill\">${revisionText('change-count', { count: changes.length })}</span>\n </h3>\n ${!this.before ? html`<p class=\"muted\">${revisionText('new-baseline')}</p>` : ''}\n ${\n changes.length\n ? html`<div class=\"scroll\">\n <table>\n <thead>\n <tr>\n <th>${revisionText('change-kind')}</th>\n <th>${revisionText('item')}</th>\n <th>${revisionText('before')}</th>\n <th>${revisionText('after')}</th>\n </tr>\n </thead>\n <tbody>\n ${changes.map(\n row =>\n html`<tr>\n <td><span class=\"pill\">${revisionText(row.kind)}</span></td>\n <td>\n ${revisionText(row.section)}${row.label ? ' · ' + row.label : ''}<br />${revisionText(row.field)}\n </td>\n <td class=\"before\">${this.display(row.field, row.before)}</td>\n <td class=\"after\">${this.display(row.field, row.after)}</td>\n </tr>`\n )}\n </tbody>\n </table>\n </div>`\n : html`<p>${revisionText('no-content-change')}</p>`\n }`\n }\n}\n\n/** Uses the existing Worklist custom-element slot. No Worklist dependency in the master module. */\n@customElement('ops-master-revision-review')\nexport class MasterRevisionReview extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n revisionStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n box-sizing: border-box;\n }\n .facts {\n display: flex;\n flex-wrap: wrap;\n gap: 24px;\n margin: 20px 0;\n }\n .facts p {\n margin: 4px 0;\n }\n .impact {\n padding: 12px;\n background: var(--md-sys-color-surface-container);\n }\n h2 {\n margin: 0;\n font-size: var(--ui-t-title, 20px);\n }\n .entity-links {\n display: flex;\n flex-wrap: wrap;\n gap: 16px 32px;\n }\n .entity-links a {\n display: inline-block;\n padding: 8px 0;\n color: var(--md-sys-color-primary);\n text-underline-offset: 3px;\n }\n `\n ]\n @property({ attribute: false }) input: any\n @property({ attribute: false }) activityApproval: any\n @state() private detailError = ''\n // Worklist recreates custom views on shell updates. The common dock has a stable owner.\n private static dockOwner = {}\n private static activeReview?: MasterRevisionReview\n private static enabled = false\n private static detailPath = ''\n private static detailRevision = ''\n private static onAddress = () => requestAnimationFrame(() => MasterRevisionReview.activeReview?.syncDetail())\n connectedCallback() {\n super.connectedCallback()\n MasterRevisionReview.activeReview = this\n // One provider listener, not one view listener: routing may disconnect a view during dispatch.\n window.addEventListener('popstate', MasterRevisionReview.onAddress, true)\n }\n disconnectedCallback() {\n if (MasterRevisionReview.activeReview === this) MasterRevisionReview.activeReview = undefined\n requestAnimationFrame(() => {\n if (!MasterRevisionReview.activeReview) {\n hideEntity360(MasterRevisionReview.dockOwner, false)\n MasterRevisionReview.enabled = false\n }\n })\n super.disconnectedCallback()\n }\n updated(changes: any) {\n super.updated(changes)\n if (changes.has('input') && MasterRevisionReview.enabled) {\n if (location.pathname !== MasterRevisionReview.detailPath ||\n this.input?.after?.detail?.revisionId !== MasterRevisionReview.detailRevision) {\n hideEntity360(MasterRevisionReview.dockOwner, false)\n MasterRevisionReview.enabled = false\n } else this.syncDetail()\n }\n }\n private syncDetail() {\n if (MasterRevisionReview.activeReview !== this || !MasterRevisionReview.enabled) return\n if (location.pathname !== MasterRevisionReview.detailPath) {\n MasterRevisionReview.enabled = false\n hideEntity360(MasterRevisionReview.dockOwner, false)\n return\n }\n try {\n const side = revisionSideAt(this.input, location.href)\n if (side) this.showDetail(side)\n else hideEntity360(MasterRevisionReview.dockOwner)\n } catch {\n hideEntity360(MasterRevisionReview.dockOwner)\n this.detailError = revisionText('detail-unavailable')\n }\n }\n private closeDetail() {\n const url = new URL(location.href)\n url.searchParams.delete('f')\n url.searchParams.delete('revision')\n const { entity360Previous: _previous, ...state } = history.state ?? {}\n history.replaceState(state, '', url)\n hideEntity360(MasterRevisionReview.dockOwner)\n }\n private showDetail(side: RevisionSide, opener?: HTMLElement) {\n const row = this.input[side]\n showEntity360(MasterRevisionReview.dockOwner, {\n key: revisionDetailAddress(this.input, side, location.href),\n title: this.input.headline,\n context: `${revisionText(side)} · ${revisionText('revision-value', { n: row.revisionNumber })}`,\n labels: { close: revisionText('dock-close'), expand: revisionText('dock-expand'), collapse: revisionText('dock-collapse'),\n resize: revisionText('dock-resize'), back: revisionText('dock-back') },\n onClose: () => (MasterRevisionReview.activeReview ?? this).closeDetail(),\n onBack: canGoBackEntity360() ? () => history.back() : undefined,\n content: html`<ops-master-revision-360 .input=${this.input} .side=${side}\n .activityApproval=${this.activityApproval}></ops-master-revision-360>`\n }, () => {\n const target = opener?.isConnected ? opener : MasterRevisionReview.activeReview?.renderRoot.querySelector<HTMLElement>(`[data-detail=\"${side}\"]`)\n target?.focus({ preventScroll: true })\n })\n }\n private openDetail(side: RevisionSide, opener?: HTMLElement) {\n try {\n const address = revisionDetailAddress(this.input, side, location.href)\n this.detailError = ''\n if (!MasterRevisionReview.enabled && new URL(location.href).searchParams.has('f')) {\n const base = new URL(location.href)\n base.searchParams.delete('f')\n base.searchParams.delete('revision')\n const { entity360Previous: _previous, ...state } = history.state ?? {}\n history.replaceState(state, '', base)\n }\n MasterRevisionReview.enabled = true\n MasterRevisionReview.detailPath = location.pathname\n MasterRevisionReview.detailRevision = this.input.after.detail.revisionId\n navigateEntity360(address)\n this.showDetail(side, opener)\n } catch {\n this.detailError = revisionText('detail-unavailable')\n }\n }\n private entityLink(side: RevisionSide) {\n const row = this.input[side]\n if (!row) return html`<span>${revisionText('no-before')}</span>`\n // A URL alone never opens a modal. Inspection is always an explicit user action.\n if (!row.detail) return html`<span>${revisionText('detail-unavailable')}</span>`\n return html`<div>\n <span class=\"muted\">${revisionText(side)}</span><br />\n <a href=${revisionDetailAddress(this.input, side, location.href)} data-detail=${side}\n @click=${(event: MouseEvent) => {\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n this.openDetail(side, event.currentTarget as HTMLElement)\n }}>${this.input.headline} · ${revisionText('revision-value', { n: row.revisionNumber })}</a>\n </div>`\n }\n render() {\n const input = this.input\n if (!input) return html``\n const axis: RevisionAxis = input.revision?.arrangementId ? 'workShift' : input.revision?.recipeId ? 'recipeDefinition' : input.revision?.materialId ? 'materialDefinition' : 'testSpecification'\n return html`<h2>${input.headline}</h2>\n <div class=\"entity-links\">${this.entityLink('before')}${this.entityLink('after')}</div>\n ${this.detailError ? html`<p role=\"alert\">${this.detailError}</p>` : ''}\n <div class=\"facts\">\n <div>\n <span class=\"muted\">${revisionText('revision')}</span>\n <p>\n ${input.before ? revisionText('revision-value', { n: input.before.revisionNumber }) : revisionText('new')} →\n ${revisionText('revision-value', { n: input.after.revisionNumber })}\n </p>\n </div>\n <div>\n <span class=\"muted\">${revisionText('effectiveFrom')}</span>\n <p>${revisionDate(input.effectiveFrom)} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</p>\n </div>\n <div>\n <span class=\"muted\">${revisionText('reason')}</span>\n <p>${input.reason}</p>\n </div>\n </div>\n <p class=\"impact\">${revisionText(axis === 'workShift' ? 'shift-impact' : axis === 'recipeDefinition' ? 'recipe-impact' : axis === 'materialDefinition' ? 'material-impact' : 'spec-impact')}</p>\n <ops-master-revision-comparison\n .axis=${axis}\n .before=${input.before}\n .after=${input.after}\n ></ops-master-revision-comparison>\n <details>\n <summary>${revisionText('full-content')}</summary>\n ${revisionContents(input.after, axis)}\n </details>\n <p class=\"muted\">${revisionText('signed-correction')}</p>`\n }\n}\n\nexport function revisionContents(value: any, axis: RevisionAxis) {\n if (axis === 'workShift') return html`<p>${revisionText('timezone')}: ${value.timezone}</p>\n <div class=\"scroll\"><table><thead><tr>${['name','fromDate','fromTime','toDate','toTime','daysOfWeek'].map(f => html`<th>${revisionText(f)}</th>`)}</tr></thead>\n <tbody>${(value.shifts ?? []).map(row => html`<tr><td>${row.name}${row.description ? html`<br /><span class=\"muted\">${row.description}</span>` : ''}</td><td>${revisionText('day-offset-' + row.fromDate)}</td><td>${row.fromTime}</td><td>${revisionText('day-offset-' + row.toDate)}</td><td>${row.toTime}</td><td>${row.daysOfWeek ? row.daysOfWeek.split(',').map(day => revisionText('weekday-' + day)).join(', ') : revisionText('every-day')}</td></tr>`)}</tbody></table></div>`\n\n if (axis === 'materialDefinition') return materialRevisionFields(value)\n return (axis === 'recipeDefinition' ? ['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>${revisionText(section)}</h3>\n <div class=\"scroll\">\n <table class=${section === 'criteria' ? 'criteria' : ''}>\n <thead>\n <tr>\n ${fields.map(field => html`<th>${revisionText(field)}</th>`)}\n </tr>\n </thead>\n <tbody>\n ${(value[section] ?? []).map(\n (row: any) =>\n html`<tr>\n ${fields.map(field => html`<td>${(section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field) ? row.limit?.[field] : row[field]) ?? '—'}</td>`)}\n </tr>`\n )}\n </tbody>\n </table>\n </div>`\n })\n}\n\n/** Read-only revision contents. Layout, scrolling and closing belong to the common dock. */\n@customElement('ops-master-revision-360')\nexport class MasterRevision360 extends localize(i18next)(LitElement) {\n static styles = [\n ...MasterRevisionReview.styles,\n css`\n :host {\n display: block;\n min-height: 0;\n }\n section {\n margin: 16px 0;\n border-top: 1px solid var(--ui-line);\n padding-top: 8px;\n }\n table.criteria { min-width: 640px; }\n th, td { overflow-wrap: normal; word-break: normal; }\n dl {\n display: grid;\n grid-template-columns: minmax(110px, 1fr) minmax(0, 3fr);\n gap: 8px 16px;\n }\n dt {\n color: var(--md-sys-color-on-surface-variant);\n }\n dd {\n margin: 0;\n overflow-wrap: anywhere;\n }\n `\n ]\n @property() side: RevisionSide = 'after'\n @property({ attribute: false }) input: any\n @property({ attribute: false }) activityApproval: any\n render() {\n const row = this.input?.[this.side]\n if (!row?.detail) return html`<p role=\"alert\">${revisionText('detail-unavailable')}</p>`\n const recipe = !!this.input.revision.recipeId\n const axis: RevisionAxis = this.input.revision.arrangementId ? 'workShift' : recipe ? 'recipeDefinition' : this.input.revision.materialId ? 'materialDefinition' : 'testSpecification'\n const state = String(this.activityApproval?.activityThread?.activityInstance?.state ?? '').toLowerCase()\n const judgment = String(this.activityApproval?.judgment ?? '').toLowerCase()\n const status =\n this.side === 'before'\n ? 'approval-baseline'\n : judgment === 'rejected'\n ? 'rejected'\n : state === 'ended'\n ? 'approved'\n : state === 'aborted'\n ? 'aborted'\n : 'pending'\n return html`<article>\n <p>\n <span class=\"pill\">${revisionText(this.side)}</span> ·\n ${revisionText('revision-value', { n: row.revisionNumber })} · ${revisionText(status)}\n </p>\n <p class=\"impact\">${revisionText('fixed-review-context')}</p>\n <section>\n <h3>${revisionText('summary')}</h3>\n <dl>\n <dt>${revisionText('description')}</dt>\n <dd>${row.description || '—'}</dd>\n ${\n recipe\n ? html`<dt>${revisionText('materialDefinitionName')}</dt>\n <dd>${row.materialDefinitionName}</dd>\n <dt>${revisionText('route')}</dt>\n <dd>${row.route || '—'}</dd>`\n : axis === 'materialDefinition' || axis === 'workShift' ? '' : html`<dt>${revisionText('version')}</dt>\n <dd>${row.version}</dd>`\n }\n </dl>\n ${revisionContents(row, axis)}\n </section>\n <section>\n <h3>${revisionText('state')}</h3>\n <dl>\n <dt>${revisionText(this.side === 'before' ? 'baseline-period' : 'proposed-start')}</dt>\n <dd>\n ${revisionDate(row.detail.validFrom ?? row.detail.effectiveFrom)}${this.side === 'before' ? html` → ${row.detail.validTo ? revisionDate(row.detail.validTo) : revisionText('until-change')}` : ''}\n </dd>\n <dt>${revisionText('time-zone')}</dt>\n <dd>${Intl.DateTimeFormat().resolvedOptions().timeZone}</dd>\n </dl>\n <p>${revisionText(this.side === 'before' ? 'baseline-period-hint' : 'proposed-start-hint')}</p>\n </section>\n <section>\n <h3>${revisionText('related-entities')}</h3>\n ${\n recipe\n ? html`<p>\n ${revisionText('inputs')}: ${[...new Set((row.inputs ?? []).map((r: any) => r.material))].join(', ')}\n </p>\n <p>\n ${revisionText('outputs')}:\n ${[...new Set((row.outputs ?? []).map((r: any) => r.material))].join(', ')}\n </p>\n <p>\n ${revisionText('operation')}:\n ${[...new Set((row.inputs ?? []).map((r: any) => r.operation).filter(Boolean))].join(', ') || '—'}\n </p>`\n : ''\n }\n <p class=\"muted\">${revisionText('relation-scope')}</p>\n </section>\n <section>\n <h3>${revisionText('history')}</h3>\n <dl>\n <dt>${revisionText('created')}</dt>\n <dd>${revisionDate(row.detail.createdAt)}</dd>\n <dt>${revisionText('frozen')}</dt>\n <dd>${revisionDate(row.detail.frozenAt)}</dd>\n <dt>${revisionText('reason')}</dt>\n <dd>${row.detail.reason}</dd>\n </dl>\n <p class=\"muted\">${revisionText('history-scope')}</p>\n </section>\n <details>\n <summary>${revisionText('technical-details')}</summary>\n <dl>\n <dt>Revision ID</dt>\n <dd>${row.detail.revisionId}</dd>\n </dl>\n </details>\n </article>`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"revision-comparison.js","sourceRoot":"","sources":["../../../client/pages/master/revision-comparison.ts"],"names":[],"mappings":"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","sourcesContent":["import { addressController, writeAddress } from '@operato/utils/address.js'\nimport { materialRevisionFields } from './material-revision-fields.js'\nimport { LitElement, html, css } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { showEntity360, hideEntity360, navigateEntity360, canGoBackEntity360 } from '@operato/layout'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport {\n revisionDifferences,\n RevisionAxis,\n RevisionSide,\n revisionDetailAddress,\n revisionSideAt\n} from './revision-view.js'\n\nexport const revisionText = (key: string, params: any = {}): string => String(i18next.t('revision-ui.' + key, params))\nexport const revisionDate = (value?: string) =>\n value\n ? new Intl.DateTimeFormat(i18next.language || 'en', { dateStyle: 'medium', timeStyle: 'short' }).format(\n new Date(value)\n )\n : '—'\nexport const revisionStyles = css`\n .material-property { border: 1px solid var(--ui-line, #ddd); margin: 12px 0; padding: 12px; min-width: 0; }\n .material-property legend { font-weight: 600; padding: 0 6px; }\n .material-property-values { display: grid; grid-template-columns: minmax(70px, 1fr) minmax(0, 3fr); gap: 8px; }\n .material-property-values dt { color: var(--md-sys-color-on-surface-variant); }\n .material-property-values dd { margin: 0; overflow-wrap: anywhere; }\n :host {\n color: var(--md-sys-color-on-surface);\n font: inherit;\n }\n table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--ui-t-small, 13px);\n }\n th,\n td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--ui-line);\n text-align: left;\n vertical-align: top;\n overflow-wrap: anywhere;\n }\n th {\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 600;\n }\n .scroll {\n overflow: auto;\n }\n .muted {\n color: var(--md-sys-color-on-surface-variant);\n }\n .pill {\n display: inline-block;\n padding: 3px 8px;\n border-radius: 4px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n }\n .before {\n color: var(--md-sys-color-on-surface-variant);\n }\n .after {\n font-weight: 600;\n }\n h3 {\n font-size: var(--ui-t-title, 16px);\n margin: 16px 0 10px;\n }\n button {\n font: inherit;\n min-height: var(--form-action-height, 32px);\n padding: 4px 12px;\n border: 1px solid var(--ui-line);\n border-radius: 4px;\n color: inherit;\n background: var(--md-sys-color-surface);\n cursor: pointer;\n }\n button.primary {\n background: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n border-color: transparent;\n }\n button:disabled {\n opacity: 0.5;\n cursor: default;\n }\n button:focus-visible,\n a:focus-visible,\n input:focus-visible,\n textarea:focus-visible,\n select:focus-visible,\n summary:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 3px;\n }\n details {\n margin: 12px 0;\n }\n summary {\n cursor: pointer;\n padding: 8px 0;\n }\n`\n@customElement('ops-master-revision-comparison')\nexport class MasterRevisionComparison extends localize(i18next)(LitElement) {\n static styles = [ScrollbarStyles, revisionStyles]\n @property() axis: RevisionAxis = 'testSpecification'\n @property({ attribute: false }) before: any\n @property({ attribute: false }) after: any\n private display(field: string, value: unknown) {\n if (value === undefined || value === null) return '—'\n if (this.axis === 'workShift') {\n if (field === 'fromDate' || field === 'toDate') return revisionText('day-offset-' + value)\n if (field === 'daysOfWeek') return String(value).split(',').map(day => revisionText('weekday-' + day)).join(', ')\n }\n return value\n }\n render() {\n const changes = revisionDifferences(this.axis, this.before, this.after)\n return html`<h3>\n ${revisionText('changes')} <span class=\"pill\">${revisionText('change-count', { count: changes.length })}</span>\n </h3>\n ${!this.before ? html`<p class=\"muted\">${revisionText('new-baseline')}</p>` : ''}\n ${\n changes.length\n ? html`<div class=\"scroll\">\n <table>\n <thead>\n <tr>\n <th>${revisionText('change-kind')}</th>\n <th>${revisionText('item')}</th>\n <th>${revisionText('before')}</th>\n <th>${revisionText('after')}</th>\n </tr>\n </thead>\n <tbody>\n ${changes.map(\n row =>\n html`<tr>\n <td><span class=\"pill\">${revisionText(row.kind)}</span></td>\n <td>\n ${revisionText(row.section)}${row.label ? ' · ' + row.label : ''}<br />${revisionText(row.field)}\n </td>\n <td class=\"before\">${this.display(row.field, row.before)}</td>\n <td class=\"after\">${this.display(row.field, row.after)}</td>\n </tr>`\n )}\n </tbody>\n </table>\n </div>`\n : html`<p>${revisionText('no-content-change')}</p>`\n }`\n }\n}\n\n/** Uses the existing Worklist custom-element slot. No Worklist dependency in the master module. */\n@customElement('ops-master-revision-review')\nexport class MasterRevisionReview extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n revisionStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n box-sizing: border-box;\n }\n .facts {\n display: flex;\n flex-wrap: wrap;\n gap: 24px;\n margin: 20px 0;\n }\n .facts p {\n margin: 4px 0;\n }\n .impact {\n padding: 12px;\n background: var(--md-sys-color-surface-container);\n }\n h2 {\n margin: 0;\n font-size: var(--ui-t-title, 20px);\n }\n .entity-links {\n display: flex;\n flex-wrap: wrap;\n gap: 16px 32px;\n }\n .entity-links a {\n display: inline-block;\n padding: 8px 0;\n color: var(--md-sys-color-primary);\n text-underline-offset: 3px;\n }\n `\n ]\n @property({ attribute: false }) input: any\n @property({ attribute: false }) activityApproval: any\n @state() private detailError = ''\n // Worklist recreates custom views on shell updates. The common dock has a stable owner.\n private static dockOwner = {}\n private static activeReview?: MasterRevisionReview\n private static enabled = false\n private static detailPath = ''\n private static detailRevision = ''\n private static stopAddress?: () => void\n private static onAddress = () => requestAnimationFrame(() => MasterRevisionReview.activeReview?.syncDetail())\n connectedCallback() {\n super.connectedCallback()\n MasterRevisionReview.activeReview = this\n // One provider listener, not one view listener: routing may disconnect a view during dispatch.\n MasterRevisionReview.stopAddress ??= addressController().subscribe(MasterRevisionReview.onAddress, false)\n }\n disconnectedCallback() {\n if (MasterRevisionReview.activeReview === this) MasterRevisionReview.activeReview = undefined\n requestAnimationFrame(() => {\n if (!MasterRevisionReview.activeReview) {\n hideEntity360(MasterRevisionReview.dockOwner, false)\n MasterRevisionReview.enabled = false\n }\n })\n super.disconnectedCallback()\n }\n updated(changes: any) {\n super.updated(changes)\n if (changes.has('input') && MasterRevisionReview.enabled) {\n if (location.pathname !== MasterRevisionReview.detailPath ||\n this.input?.after?.detail?.revisionId !== MasterRevisionReview.detailRevision) {\n hideEntity360(MasterRevisionReview.dockOwner, false)\n MasterRevisionReview.enabled = false\n } else this.syncDetail()\n }\n }\n private syncDetail() {\n if (MasterRevisionReview.activeReview !== this || !MasterRevisionReview.enabled) return\n if (location.pathname !== MasterRevisionReview.detailPath) {\n MasterRevisionReview.enabled = false\n hideEntity360(MasterRevisionReview.dockOwner, false)\n return\n }\n try {\n const side = revisionSideAt(this.input, location.href)\n if (side) this.showDetail(side)\n else hideEntity360(MasterRevisionReview.dockOwner)\n } catch {\n hideEntity360(MasterRevisionReview.dockOwner)\n this.detailError = revisionText('detail-unavailable')\n }\n }\n private async closeDetail() {\n const url = new URL(location.href)\n url.searchParams.delete('f')\n url.searchParams.delete('revision')\n const { entity360Previous: _previous, ...state } = history.state ?? {}\n if (!(await writeAddress(url, { state, replace: true }))) return\n hideEntity360(MasterRevisionReview.dockOwner)\n }\n private showDetail(side: RevisionSide, opener?: HTMLElement) {\n const row = this.input[side]\n showEntity360(MasterRevisionReview.dockOwner, {\n key: revisionDetailAddress(this.input, side, location.href),\n title: this.input.headline,\n context: `${revisionText(side)} · ${revisionText('revision-value', { n: row.revisionNumber })}`,\n labels: { close: revisionText('dock-close'), expand: revisionText('dock-expand'), collapse: revisionText('dock-collapse'),\n resize: revisionText('dock-resize'), back: revisionText('dock-back') },\n onClose: () => (MasterRevisionReview.activeReview ?? this).closeDetail(),\n onBack: canGoBackEntity360() ? () => history.back() : undefined,\n content: html`<ops-master-revision-360 .input=${this.input} .side=${side}\n .activityApproval=${this.activityApproval}></ops-master-revision-360>`\n }, () => {\n const target = opener?.isConnected ? opener : MasterRevisionReview.activeReview?.renderRoot.querySelector<HTMLElement>(`[data-detail=\"${side}\"]`)\n target?.focus({ preventScroll: true })\n })\n }\n private async openDetail(side: RevisionSide, opener?: HTMLElement) {\n try {\n const address = revisionDetailAddress(this.input, side, location.href)\n this.detailError = ''\n if (!MasterRevisionReview.enabled && new URL(location.href).searchParams.has('f')) {\n const base = new URL(location.href)\n base.searchParams.delete('f')\n base.searchParams.delete('revision')\n const { entity360Previous: _previous, ...state } = history.state ?? {}\n if (!(await writeAddress(base, { state, replace: true }))) return\n }\n if (!(await navigateEntity360(address))) return\n MasterRevisionReview.enabled = true\n MasterRevisionReview.detailPath = location.pathname\n MasterRevisionReview.detailRevision = this.input.after.detail.revisionId\n this.showDetail(side, opener)\n } catch {\n this.detailError = revisionText('detail-unavailable')\n }\n }\n private entityLink(side: RevisionSide) {\n const row = this.input[side]\n if (!row) return html`<span>${revisionText('no-before')}</span>`\n // A URL alone never opens a modal. Inspection is always an explicit user action.\n if (!row.detail) return html`<span>${revisionText('detail-unavailable')}</span>`\n return html`<div>\n <span class=\"muted\">${revisionText(side)}</span><br />\n <a href=${revisionDetailAddress(this.input, side, location.href)} data-detail=${side}\n @click=${(event: MouseEvent) => {\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n this.openDetail(side, event.currentTarget as HTMLElement)\n }}>${this.input.headline} · ${revisionText('revision-value', { n: row.revisionNumber })}</a>\n </div>`\n }\n render() {\n const input = this.input\n if (!input) return html``\n const axis: RevisionAxis = input.revision?.arrangementId ? 'workShift' : input.revision?.recipeId ? 'recipeDefinition' : input.revision?.materialId ? 'materialDefinition' : 'testSpecification'\n return html`<h2>${input.headline}</h2>\n <div class=\"entity-links\">${this.entityLink('before')}${this.entityLink('after')}</div>\n ${this.detailError ? html`<p role=\"alert\">${this.detailError}</p>` : ''}\n <div class=\"facts\">\n <div>\n <span class=\"muted\">${revisionText('revision')}</span>\n <p>\n ${input.before ? revisionText('revision-value', { n: input.before.revisionNumber }) : revisionText('new')} →\n ${revisionText('revision-value', { n: input.after.revisionNumber })}\n </p>\n </div>\n <div>\n <span class=\"muted\">${revisionText('effectiveFrom')}</span>\n <p>${revisionDate(input.effectiveFrom)} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}</p>\n </div>\n <div>\n <span class=\"muted\">${revisionText('reason')}</span>\n <p>${input.reason}</p>\n </div>\n </div>\n <p class=\"impact\">${revisionText(axis === 'workShift' ? 'shift-impact' : axis === 'recipeDefinition' ? 'recipe-impact' : axis === 'materialDefinition' ? 'material-impact' : 'spec-impact')}</p>\n <ops-master-revision-comparison\n .axis=${axis}\n .before=${input.before}\n .after=${input.after}\n ></ops-master-revision-comparison>\n <details>\n <summary>${revisionText('full-content')}</summary>\n ${revisionContents(input.after, axis)}\n </details>\n <p class=\"muted\">${revisionText('signed-correction')}</p>`\n }\n}\n\nexport function revisionContents(value: any, axis: RevisionAxis) {\n if (axis === 'workShift') return html`<p>${revisionText('timezone')}: ${value.timezone}</p>\n <div class=\"scroll\"><table><thead><tr>${['name','fromDate','fromTime','toDate','toTime','daysOfWeek'].map(f => html`<th>${revisionText(f)}</th>`)}</tr></thead>\n <tbody>${(value.shifts ?? []).map(row => html`<tr><td>${row.name}${row.description ? html`<br /><span class=\"muted\">${row.description}</span>` : ''}</td><td>${revisionText('day-offset-' + row.fromDate)}</td><td>${row.fromTime}</td><td>${revisionText('day-offset-' + row.toDate)}</td><td>${row.toTime}</td><td>${row.daysOfWeek ? row.daysOfWeek.split(',').map(day => revisionText('weekday-' + day)).join(', ') : revisionText('every-day')}</td></tr>`)}</tbody></table></div>`\n\n if (axis === 'materialDefinition') return materialRevisionFields(value)\n return (axis === 'recipeDefinition' ? ['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>${revisionText(section)}</h3>\n <div class=\"scroll\">\n <table class=${section === 'criteria' ? 'criteria' : ''}>\n <thead>\n <tr>\n ${fields.map(field => html`<th>${revisionText(field)}</th>`)}\n </tr>\n </thead>\n <tbody>\n ${(value[section] ?? []).map(\n (row: any) =>\n html`<tr>\n ${fields.map(field => html`<td>${(section === 'criteria' && ['minimum', 'maximum', 'uom'].includes(field) ? row.limit?.[field] : row[field]) ?? '—'}</td>`)}\n </tr>`\n )}\n </tbody>\n </table>\n </div>`\n })\n}\n\n/** Read-only revision contents. Layout, scrolling and closing belong to the common dock. */\n@customElement('ops-master-revision-360')\nexport class MasterRevision360 extends localize(i18next)(LitElement) {\n static styles = [\n ...MasterRevisionReview.styles,\n css`\n :host {\n display: block;\n min-height: 0;\n }\n section {\n margin: 16px 0;\n border-top: 1px solid var(--ui-line);\n padding-top: 8px;\n }\n table.criteria { min-width: 640px; }\n th, td { overflow-wrap: normal; word-break: normal; }\n dl {\n display: grid;\n grid-template-columns: minmax(110px, 1fr) minmax(0, 3fr);\n gap: 8px 16px;\n }\n dt {\n color: var(--md-sys-color-on-surface-variant);\n }\n dd {\n margin: 0;\n overflow-wrap: anywhere;\n }\n `\n ]\n @property() side: RevisionSide = 'after'\n @property({ attribute: false }) input: any\n @property({ attribute: false }) activityApproval: any\n render() {\n const row = this.input?.[this.side]\n if (!row?.detail) return html`<p role=\"alert\">${revisionText('detail-unavailable')}</p>`\n const recipe = !!this.input.revision.recipeId\n const axis: RevisionAxis = this.input.revision.arrangementId ? 'workShift' : recipe ? 'recipeDefinition' : this.input.revision.materialId ? 'materialDefinition' : 'testSpecification'\n const state = String(this.activityApproval?.activityThread?.activityInstance?.state ?? '').toLowerCase()\n const judgment = String(this.activityApproval?.judgment ?? '').toLowerCase()\n const status =\n this.side === 'before'\n ? 'approval-baseline'\n : judgment === 'rejected'\n ? 'rejected'\n : state === 'ended'\n ? 'approved'\n : state === 'aborted'\n ? 'aborted'\n : 'pending'\n return html`<article>\n <p>\n <span class=\"pill\">${revisionText(this.side)}</span> ·\n ${revisionText('revision-value', { n: row.revisionNumber })} · ${revisionText(status)}\n </p>\n <p class=\"impact\">${revisionText('fixed-review-context')}</p>\n <section>\n <h3>${revisionText('summary')}</h3>\n <dl>\n <dt>${revisionText('description')}</dt>\n <dd>${row.description || '—'}</dd>\n ${\n recipe\n ? html`<dt>${revisionText('materialDefinitionName')}</dt>\n <dd>${row.materialDefinitionName}</dd>\n <dt>${revisionText('route')}</dt>\n <dd>${row.route || '—'}</dd>`\n : axis === 'materialDefinition' || axis === 'workShift' ? '' : html`<dt>${revisionText('version')}</dt>\n <dd>${row.version}</dd>`\n }\n </dl>\n ${revisionContents(row, axis)}\n </section>\n <section>\n <h3>${revisionText('state')}</h3>\n <dl>\n <dt>${revisionText(this.side === 'before' ? 'baseline-period' : 'proposed-start')}</dt>\n <dd>\n ${revisionDate(row.detail.validFrom ?? row.detail.effectiveFrom)}${this.side === 'before' ? html` → ${row.detail.validTo ? revisionDate(row.detail.validTo) : revisionText('until-change')}` : ''}\n </dd>\n <dt>${revisionText('time-zone')}</dt>\n <dd>${Intl.DateTimeFormat().resolvedOptions().timeZone}</dd>\n </dl>\n <p>${revisionText(this.side === 'before' ? 'baseline-period-hint' : 'proposed-start-hint')}</p>\n </section>\n <section>\n <h3>${revisionText('related-entities')}</h3>\n ${\n recipe\n ? html`<p>\n ${revisionText('inputs')}: ${[...new Set((row.inputs ?? []).map((r: any) => r.material))].join(', ')}\n </p>\n <p>\n ${revisionText('outputs')}:\n ${[...new Set((row.outputs ?? []).map((r: any) => r.material))].join(', ')}\n </p>\n <p>\n ${revisionText('operation')}:\n ${[...new Set((row.inputs ?? []).map((r: any) => r.operation).filter(Boolean))].join(', ') || '—'}\n </p>`\n : ''\n }\n <p class=\"muted\">${revisionText('relation-scope')}</p>\n </section>\n <section>\n <h3>${revisionText('history')}</h3>\n <dl>\n <dt>${revisionText('created')}</dt>\n <dd>${revisionDate(row.detail.createdAt)}</dd>\n <dt>${revisionText('frozen')}</dt>\n <dd>${revisionDate(row.detail.frozenAt)}</dd>\n <dt>${revisionText('reason')}</dt>\n <dd>${row.detail.reason}</dd>\n </dl>\n <p class=\"muted\">${revisionText('history-scope')}</p>\n </section>\n <details>\n <summary>${revisionText('technical-details')}</summary>\n <dl>\n <dt>Revision ID</dt>\n <dd>${row.detail.revisionId}</dd>\n </dl>\n </details>\n </article>`\n }\n}\n"]}
|