@things-factory/work-shift 10.1.79 → 10.1.104
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/work-shift.js +7 -5
- package/dist-client/pages/work-shift.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/work-shift/work-shift-lifecycle-resolver.d.ts +1 -1
- package/dist-server/service/work-shift/work-shift-lifecycle-resolver.js +6 -4
- package/dist-server/service/work-shift/work-shift-lifecycle-resolver.js.map +1 -1
- package/dist-server/service/work-shift/work-shift-lifecycle.d.ts +2 -0
- package/dist-server/service/work-shift/work-shift-lifecycle.js +6 -1
- package/dist-server/service/work-shift/work-shift-lifecycle.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -109,8 +109,10 @@ let WorkShift = class WorkShift extends PageView {
|
|
|
109
109
|
await promise;
|
|
110
110
|
}
|
|
111
111
|
else {
|
|
112
|
-
const
|
|
113
|
-
|
|
112
|
+
const { description, timezone, shifts, effectiveFrom, reason } = this.draft;
|
|
113
|
+
const result = await client.mutate({ mutation: gql `mutation($revisionId:String,$editGeneration:Int,$content:Object!){saveAndPublishWorkShift(revisionId:$revisionId,editGeneration:$editGeneration,content:$content)}`,
|
|
114
|
+
variables: { revisionId: this.draft.id, editGeneration: this.draft.editGeneration,
|
|
115
|
+
content: { description, timezone, shifts, effectiveFrom, reason } } });
|
|
114
116
|
if (result.errors?.length)
|
|
115
117
|
throw new Error(result.errors[0].message);
|
|
116
118
|
}
|
|
@@ -160,18 +162,18 @@ let WorkShift = class WorkShift extends PageView {
|
|
|
160
162
|
${this.draft.shifts.map((row, index) => html `<tr>
|
|
161
163
|
<td><input aria-label=${'name-' + index} .value=${row.name} @input=${(e) => this.changeShift(index, 'name', e.target.value)} />
|
|
162
164
|
<label>${t('description')}<input aria-label=${'description-' + index} .value=${row.description ?? ''} @input=${(e) => this.changeShift(index, 'description', e.target.value)} /></label></td>
|
|
163
|
-
${['from', 'to'].map(side => html `<td><select aria-label=${side + 'Date-' + index}
|
|
165
|
+
${['from', 'to'].map(side => html `<td><select aria-label=${side + 'Date-' + index} @change=${(e) => this.changeShift(index, side + 'Date', Number(e.target.value))}>${[-1, 0, 1].map(d => html `<option value=${d} .selected=${d === row[side + 'Date']}>${t('day-offset-' + d)}</option>`)}</select></td>
|
|
164
166
|
<td><input aria-label=${side + 'Time-' + index} type="time" .value=${row[side + 'Time']} @input=${(e) => this.changeShift(index, side + 'Time', e.target.value)} /></td>`)}
|
|
165
167
|
<td>${this.weekdays(row, index)}</td><td><button ?disabled=${this.draft.shifts.length === 1} @click=${() => this.change('shifts', this.draft.shifts.filter((_, i) => i !== index))}>${t('remove')}</button></td>
|
|
166
168
|
</tr>`)}
|
|
167
169
|
</tbody></table></div><button @click=${() => this.change('shifts', [...this.draft.shifts, { name: '', fromDate: 0, fromTime: '16:00', toDate: 1, toTime: '00:00', daysOfWeek: '' }])}>${t('add-shift')}</button>
|
|
168
170
|
<p class="notice">${t('shift-impact')}</p>
|
|
169
171
|
<div class="bar"><button ?disabled=${this.busy} @click=${() => this.save()}>${t('save-draft')}</button>
|
|
170
|
-
<button class="primary" ?disabled=${this.busy || this.dirty || !this.draft.id} @click=${() => this.submit()}>${
|
|
172
|
+
<button class="primary" ?disabled=${this.busy || (this.overview.approvalRequired && (this.dirty || !this.draft.id))} @click=${() => this.submit()}>${this.overview.approvalRequired ? t('request-approval') : i18next.t('button.save')}</button></div>`}
|
|
171
173
|
<button ?disabled=${this.busy} @click=${() => { if (!this.dirty || window.confirm(t('discard-changes'))) {
|
|
172
174
|
this.draft = undefined;
|
|
173
175
|
this.dirty = false;
|
|
174
|
-
} }}>${t('close-
|
|
176
|
+
} }}>${t('close-editor')}</button>
|
|
175
177
|
${this.draft.id ? html `<ops-master-revision-comparison axis="workShift" .before=${base} .after=${this.draft}></ops-master-revision-comparison>` : ''}
|
|
176
178
|
</section>` : ''}
|
|
177
179
|
${this.overview ? html `<section><h2>${t('history')}</h2>${[...this.overview.revisions].reverse().map((row) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-shift.js","sourceRoot":"","sources":["../../client/pages/work-shift.ts"],"names":[],"mappings":"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","sourcesContent":["import gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { PageView } from '@operato/shell'\nimport { DocumentPageStyles, ScrollbarStyles } from '@operato/styles'\nimport { revisionText as t, revisionDate, revisionContents, revisionStyles } from '@things-factory/ops-master/dist-client/pages/master/revision-comparison.js'\nimport { localDateTime, isoFromLocal } from '@things-factory/ops-master/dist-client/pages/master/revision-view.js'\n\n@customElement('work-shift')\nexport class WorkShift extends PageView {\n static styles = [DocumentPageStyles, ScrollbarStyles, revisionStyles, css`\n .page { padding: 20px; display: grid; gap: 20px; min-width: 0; }\n section { border: 1px solid var(--ui-line); border-radius: 6px; padding: 16px; min-width: 0; }\n h2 { font-size: 18px; margin: 0 0 12px; }\n .bar, .fields { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n .fields label { display: grid; gap: 5px; flex: 1 1 200px; }\n input, select, textarea { font: inherit; padding: 6px 8px; border: 1px solid var(--ui-line); border-radius: 4px; background: var(--md-sys-color-surface); color: inherit; box-sizing: border-box; max-width: 100%; }\n input[type=time] { width: 105px; }\n .scroll table { min-width: 780px; }\n .week { display:flex; flex-wrap:wrap; gap:4px; max-width:210px; }\n .week label { white-space:nowrap; }\n .current { border-left: 4px solid var(--md-sys-color-primary); }\n .notice { padding:12px; background:var(--md-sys-color-surface-container); }\n `]\n @state() private overview: any\n @state() private draft: any\n @state() private message = ''\n @state() private busy = false\n @state() private statuses: Record<string, any> = {}\n private dirty = false\n get context(): any { return { title: i18next.t('title.work-shift'), frame: 'document', help: 'page/work-shift' } }\n async pageUpdated() { if (this.active && !this.dirty) await this.load() }\n private current() {\n const segment = this.overview?.schedule.find((s: any) => s.state === 'current')\n return segment && this.overview.revisions.find((r: any) => r.id === segment.revisionId)\n }\n private async run(action: () => Promise<void>) {\n this.busy = true; this.message = ''\n try { await action() } catch(e: any) { this.message = e.message }\n finally { this.busy = false }\n }\n private async load() {\n await this.run(async () => {\n const result = await client.query({ query: gql`query { workShiftRevisionOverview }`, fetchPolicy: 'no-cache' })\n if (result.errors?.length) throw new Error(result.errors[0].message)\n this.overview = result.data.workShiftRevisionOverview\n const statuses: Record<string, any> = {}\n for (const row of this.overview.revisions.filter((r: any) => r.activityInstanceId)) {\n let promise: Promise<any> | undefined\n document.dispatchEvent(new CustomEvent('master-change-status', { detail: { activityInstanceId: row.activityInstanceId, respondWith: (p: Promise<any>) => promise = p } }))\n if (promise) statuses[row.id] = await promise\n }\n this.statuses = statuses\n })\n }\n private begin(row = this.current()) {\n this.draft = { description: row?.description ?? '', timezone: row?.timezone ?? this.overview.timezone,\n /* 편성이 아직 없으면 옛 교대로 시작한다 — 운영자가 그것을 보고 고친다(2026-09-24). */\n shifts: structuredClone(row?.shifts ?? (this.overview.legacyShifts?.length\n ? this.overview.legacyShifts\n : [{ name: '', fromDate: 0, fromTime: '08:00', toDate: 0, toTime: '16:00', daysOfWeek: '' }])),\n effectiveFrom: new Date().toISOString(), reason: '' }\n this.dirty = false\n }\n private change(field: string, value: any) { this.draft = { ...this.draft, [field]: value }; this.dirty = true }\n private changeShift(index: number, field: string, value: any) {\n this.change('shifts', this.draft.shifts.map((s: any, i: number) => i === index ? { ...s, [field]: value } : s))\n }\n private async save() {\n await this.run(async () => {\n const { description, timezone, shifts, effectiveFrom, reason } = this.draft\n const content = { description, timezone, shifts, effectiveFrom, reason }\n const editing = !!this.draft.id\n const response = await client.mutate({ mutation: editing\n ? gql`mutation($revisionId:String!,$editGeneration:Int!,$content:Object!){editWorkShiftDraft(revisionId:$revisionId,editGeneration:$editGeneration,content:$content)}`\n : gql`mutation($content:Object!){createWorkShiftDraft(content:$content)}`,\n variables: { content, ...(editing ? { revisionId: this.draft.id, editGeneration: this.draft.editGeneration } : {}) } })\n if (response.errors?.length) throw new Error(response.errors[0].message)\n this.draft = response.data[editing ? 'editWorkShiftDraft' : 'createWorkShiftDraft']\n this.dirty = false\n })\n if (!this.message) await this.load()\n }\n private async submit() {\n await this.run(async () => {\n if (this.overview.approvalRequired) {\n let promise: Promise<any> | undefined\n document.dispatchEvent(new CustomEvent('master-change-approval', { detail: {\n axis: 'workShift', revisionId: this.draft.id, editGeneration: this.draft.editGeneration,\n respondWith: (p: Promise<any>) => promise = p } }))\n if (!promise) throw new Error(t('approval-unavailable'))\n await promise\n } else {\n const result = await client.mutate({ mutation: gql`mutation($revisionId:String!,$editGeneration:Int!){publishWorkShiftDraft(revisionId:$revisionId,editGeneration:$editGeneration)}`,\n variables: { revisionId: this.draft.id, editGeneration: this.draft.editGeneration } })\n if (result.errors?.length) throw new Error(result.errors[0].message)\n }\n this.draft = undefined; this.dirty = false\n })\n if (!this.message) await this.load()\n }\n private rowStatus(row: any) {\n const segment = this.overview.schedule.find((s: any) => s.revisionId === row.id)\n return segment?.state ?? this.statuses[row.id]?.state ?? (row.frozenAt ? 'pending' : 'draft')\n }\n private weekdays(row: any, index: number) {\n const days = row.daysOfWeek ? row.daysOfWeek.split(',') : ['0','1','2','3','4','5','6']\n return html`<div class=\"week\">${['1','2','3','4','5','6','0'].map(day => html`<label><input type=\"checkbox\" .checked=${days.includes(day)}\n @change=${(e: any) => {\n const next = e.target.checked ? [...days,day] : days.filter(d => d !== day)\n if (!next.length) { e.target.checked = true; return }\n this.changeShift(index, 'daysOfWeek', next.length === 7 ? '' : [...new Set(next)].sort().join(','))\n }} />${t('weekday-' + day)}</label>`)}</div>`\n }\n render() {\n const current = this.current(), base = this.draft && this.overview?.revisions.find((r: any) => r.id === this.draft.baseRevisionId)\n return html`<div class=\"page\">\n <div class=\"bar\"><button ?disabled=${this.busy || this.dirty} @click=${() => this.load()}>${t('refresh')}</button>\n <button ?disabled=${this.busy || !this.overview || !!this.draft} @click=${() => this.begin()}>${t('create-change')}</button></div>\n ${this.message ? html`<p role=\"alert\">${this.message}</p>` : ''}\n <section class=\"current\"><h2>${t('current')}</h2>\n ${current ? html`<p>${t('revision-value',{n:current.revisionNumber})} · ${revisionDate(this.overview.schedule.find((s:any)=>s.state==='current').validFrom)}</p>${revisionContents(current,'workShift')}`\n : html`<p>${t('no-current')}</p>`}\n </section>\n ${this.draft ? html`<section><h2>${this.draft.id ? t('revision-value',{n:this.draft.revisionNumber}) : t('new')} · ${t(this.draft.id ? this.rowStatus(this.draft) : 'draft')}</h2>\n ${this.draft.frozenAt ? revisionContents(this.draft,'workShift') : html`\n <div class=\"fields\">${['description','timezone','reason'].map(field => html`<label>${t(field)}<input aria-label=${field} .value=${this.draft[field] ?? ''} @input=${(e:any)=>this.change(field,e.target.value)} /></label>`)}\n <label>${t('effectiveFrom')} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}<input aria-label=\"effectiveFrom\" type=\"datetime-local\" .value=${localDateTime(this.draft.effectiveFrom)} @change=${(e:any)=>{try {this.change('effectiveFrom',isoFromLocal(e.target.value))} catch(err:any){this.message=err.message}}} /></label>\n </div>\n <div class=\"scroll\"><table><thead><tr>${['name','fromDate','fromTime','toDate','toTime','daysOfWeek'].map(f=>html`<th>${t(f)}</th>`)}<th></th></tr></thead><tbody>\n ${this.draft.shifts.map((row:any,index:number)=>html`<tr>\n <td><input aria-label=${'name-'+index} .value=${row.name} @input=${(e:any)=>this.changeShift(index,'name',e.target.value)} />\n <label>${t('description')}<input aria-label=${'description-'+index} .value=${row.description ?? ''} @input=${(e:any)=>this.changeShift(index,'description',e.target.value)} /></label></td>\n ${['from','to'].map(side=>html`<td><select aria-label=${side+'Date-'+index} .value=${String(row[side+'Date'])} @change=${(e:any)=>this.changeShift(index,side+'Date',Number(e.target.value))}>${[-1,0,1].map(d=>html`<option value=${d}>${t('day-offset-'+d)}</option>`)}</select></td>\n <td><input aria-label=${side+'Time-'+index} type=\"time\" .value=${row[side+'Time']} @input=${(e:any)=>this.changeShift(index,side+'Time',e.target.value)} /></td>`)}\n <td>${this.weekdays(row,index)}</td><td><button ?disabled=${this.draft.shifts.length===1} @click=${()=>this.change('shifts',this.draft.shifts.filter((_:any,i:number)=>i!==index))}>${t('remove')}</button></td>\n </tr>`)}\n </tbody></table></div><button @click=${()=>this.change('shifts',[...this.draft.shifts,{name:'',fromDate:0,fromTime:'16:00',toDate:1,toTime:'00:00',daysOfWeek:''}])}>${t('add-shift')}</button>\n <p class=\"notice\">${t('shift-impact')}</p>\n <div class=\"bar\"><button ?disabled=${this.busy} @click=${()=>this.save()}>${t('save-draft')}</button>\n <button class=\"primary\" ?disabled=${this.busy || this.dirty || !this.draft.id} @click=${()=>this.submit()}>${t(this.overview.approvalRequired?'request-approval':'publish')}</button></div>`}\n <button ?disabled=${this.busy} @click=${()=>{if(!this.dirty || window.confirm(t('discard-changes'))){this.draft=undefined;this.dirty=false}}}>${t('close-details')}</button>\n ${this.draft.id ? html`<ops-master-revision-comparison axis=\"workShift\" .before=${base} .after=${this.draft}></ops-master-revision-comparison>` : ''}\n </section>` : ''}\n ${this.overview ? html`<section><h2>${t('history')}</h2>${[...this.overview.revisions].reverse().map((row:any)=>{\n const period=this.overview.schedule.find((s:any)=>s.revisionId===row.id), status=this.statuses[row.id]\n return html`<div class=\"bar\"><button ?disabled=${this.dirty} @click=${()=>{this.draft=structuredClone(row);this.dirty=false}}>${t('revision-value',{n:row.revisionNumber})}</button><span class=\"pill\">${t(this.rowStatus(row))}</span>\n <span>${period ? html`${revisionDate(period.validFrom)} → ${period.validTo ? revisionDate(period.validTo) : t('until-change')}` : html`${t('effectiveFrom')}: ${revisionDate(row.effectiveFrom)}`}</span>\n ${status?.comment ? html`<span>${status.comment}</span>` : ''}${status?.open ? html`<button @click=${()=>status.open()}>${t('approval-detail')}</button>` : ''}\n <button ?disabled=${this.dirty} @click=${()=>this.begin(row)}>${t('create-change')}</button></div>`\n })}</section>` : ''}\n </div>`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"work-shift.js","sourceRoot":"","sources":["../../client/pages/work-shift.ts"],"names":[],"mappings":"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","sourcesContent":["import gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { PageView } from '@operato/shell'\nimport { DocumentPageStyles, ScrollbarStyles } from '@operato/styles'\nimport { revisionText as t, revisionDate, revisionContents, revisionStyles } from '@things-factory/ops-master/dist-client/pages/master/revision-comparison.js'\nimport { localDateTime, isoFromLocal } from '@things-factory/ops-master/dist-client/pages/master/revision-view.js'\n\n@customElement('work-shift')\nexport class WorkShift extends PageView {\n static styles = [DocumentPageStyles, ScrollbarStyles, revisionStyles, css`\n .page { padding: 20px; display: grid; gap: 20px; min-width: 0; }\n section { border: 1px solid var(--ui-line); border-radius: 6px; padding: 16px; min-width: 0; }\n h2 { font-size: 18px; margin: 0 0 12px; }\n .bar, .fields { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n .fields label { display: grid; gap: 5px; flex: 1 1 200px; }\n input, select, textarea { font: inherit; padding: 6px 8px; border: 1px solid var(--ui-line); border-radius: 4px; background: var(--md-sys-color-surface); color: inherit; box-sizing: border-box; max-width: 100%; }\n input[type=time] { width: 105px; }\n .scroll table { min-width: 780px; }\n .week { display:flex; flex-wrap:wrap; gap:4px; max-width:210px; }\n .week label { white-space:nowrap; }\n .current { border-left: 4px solid var(--md-sys-color-primary); }\n .notice { padding:12px; background:var(--md-sys-color-surface-container); }\n `]\n @state() private overview: any\n @state() private draft: any\n @state() private message = ''\n @state() private busy = false\n @state() private statuses: Record<string, any> = {}\n private dirty = false\n get context(): any { return { title: i18next.t('title.work-shift'), frame: 'document', help: 'page/work-shift' } }\n async pageUpdated() { if (this.active && !this.dirty) await this.load() }\n private current() {\n const segment = this.overview?.schedule.find((s: any) => s.state === 'current')\n return segment && this.overview.revisions.find((r: any) => r.id === segment.revisionId)\n }\n private async run(action: () => Promise<void>) {\n this.busy = true; this.message = ''\n try { await action() } catch(e: any) { this.message = e.message }\n finally { this.busy = false }\n }\n private async load() {\n await this.run(async () => {\n const result = await client.query({ query: gql`query { workShiftRevisionOverview }`, fetchPolicy: 'no-cache' })\n if (result.errors?.length) throw new Error(result.errors[0].message)\n this.overview = result.data.workShiftRevisionOverview\n const statuses: Record<string, any> = {}\n for (const row of this.overview.revisions.filter((r: any) => r.activityInstanceId)) {\n let promise: Promise<any> | undefined\n document.dispatchEvent(new CustomEvent('master-change-status', { detail: { activityInstanceId: row.activityInstanceId, respondWith: (p: Promise<any>) => promise = p } }))\n if (promise) statuses[row.id] = await promise\n }\n this.statuses = statuses\n })\n }\n private begin(row = this.current()) {\n this.draft = { description: row?.description ?? '', timezone: row?.timezone ?? this.overview.timezone,\n /* 편성이 아직 없으면 옛 교대로 시작한다 — 운영자가 그것을 보고 고친다(2026-09-24). */\n shifts: structuredClone(row?.shifts ?? (this.overview.legacyShifts?.length\n ? this.overview.legacyShifts\n : [{ name: '', fromDate: 0, fromTime: '08:00', toDate: 0, toTime: '16:00', daysOfWeek: '' }])),\n effectiveFrom: new Date().toISOString(), reason: '' }\n this.dirty = false\n }\n private change(field: string, value: any) { this.draft = { ...this.draft, [field]: value }; this.dirty = true }\n private changeShift(index: number, field: string, value: any) {\n this.change('shifts', this.draft.shifts.map((s: any, i: number) => i === index ? { ...s, [field]: value } : s))\n }\n private async save() {\n await this.run(async () => {\n const { description, timezone, shifts, effectiveFrom, reason } = this.draft\n const content = { description, timezone, shifts, effectiveFrom, reason }\n const editing = !!this.draft.id\n const response = await client.mutate({ mutation: editing\n ? gql`mutation($revisionId:String!,$editGeneration:Int!,$content:Object!){editWorkShiftDraft(revisionId:$revisionId,editGeneration:$editGeneration,content:$content)}`\n : gql`mutation($content:Object!){createWorkShiftDraft(content:$content)}`,\n variables: { content, ...(editing ? { revisionId: this.draft.id, editGeneration: this.draft.editGeneration } : {}) } })\n if (response.errors?.length) throw new Error(response.errors[0].message)\n this.draft = response.data[editing ? 'editWorkShiftDraft' : 'createWorkShiftDraft']\n this.dirty = false\n })\n if (!this.message) await this.load()\n }\n private async submit() {\n await this.run(async () => {\n if (this.overview.approvalRequired) {\n let promise: Promise<any> | undefined\n document.dispatchEvent(new CustomEvent('master-change-approval', { detail: {\n axis: 'workShift', revisionId: this.draft.id, editGeneration: this.draft.editGeneration,\n respondWith: (p: Promise<any>) => promise = p } }))\n if (!promise) throw new Error(t('approval-unavailable'))\n await promise\n } else {\n const { description, timezone, shifts, effectiveFrom, reason } = this.draft\n const result = await client.mutate({ mutation: gql`mutation($revisionId:String,$editGeneration:Int,$content:Object!){saveAndPublishWorkShift(revisionId:$revisionId,editGeneration:$editGeneration,content:$content)}`,\n variables: { revisionId: this.draft.id, editGeneration: this.draft.editGeneration,\n content: { description, timezone, shifts, effectiveFrom, reason } } })\n if (result.errors?.length) throw new Error(result.errors[0].message)\n }\n this.draft = undefined; this.dirty = false\n })\n if (!this.message) await this.load()\n }\n private rowStatus(row: any) {\n const segment = this.overview.schedule.find((s: any) => s.revisionId === row.id)\n return segment?.state ?? this.statuses[row.id]?.state ?? (row.frozenAt ? 'pending' : 'draft')\n }\n private weekdays(row: any, index: number) {\n const days = row.daysOfWeek ? row.daysOfWeek.split(',') : ['0','1','2','3','4','5','6']\n return html`<div class=\"week\">${['1','2','3','4','5','6','0'].map(day => html`<label><input type=\"checkbox\" .checked=${days.includes(day)}\n @change=${(e: any) => {\n const next = e.target.checked ? [...days,day] : days.filter(d => d !== day)\n if (!next.length) { e.target.checked = true; return }\n this.changeShift(index, 'daysOfWeek', next.length === 7 ? '' : [...new Set(next)].sort().join(','))\n }} />${t('weekday-' + day)}</label>`)}</div>`\n }\n render() {\n const current = this.current(), base = this.draft && this.overview?.revisions.find((r: any) => r.id === this.draft.baseRevisionId)\n return html`<div class=\"page\">\n <div class=\"bar\"><button ?disabled=${this.busy || this.dirty} @click=${() => this.load()}>${t('refresh')}</button>\n <button ?disabled=${this.busy || !this.overview || !!this.draft} @click=${() => this.begin()}>${t('create-change')}</button></div>\n ${this.message ? html`<p role=\"alert\">${this.message}</p>` : ''}\n <section class=\"current\"><h2>${t('current')}</h2>\n ${current ? html`<p>${t('revision-value',{n:current.revisionNumber})} · ${revisionDate(this.overview.schedule.find((s:any)=>s.state==='current').validFrom)}</p>${revisionContents(current,'workShift')}`\n : html`<p>${t('no-current')}</p>`}\n </section>\n ${this.draft ? html`<section><h2>${this.draft.id ? t('revision-value',{n:this.draft.revisionNumber}) : t('new')} · ${t(this.draft.id ? this.rowStatus(this.draft) : 'draft')}</h2>\n ${this.draft.frozenAt ? revisionContents(this.draft,'workShift') : html`\n <div class=\"fields\">${['description','timezone','reason'].map(field => html`<label>${t(field)}<input aria-label=${field} .value=${this.draft[field] ?? ''} @input=${(e:any)=>this.change(field,e.target.value)} /></label>`)}\n <label>${t('effectiveFrom')} · ${Intl.DateTimeFormat().resolvedOptions().timeZone}<input aria-label=\"effectiveFrom\" type=\"datetime-local\" .value=${localDateTime(this.draft.effectiveFrom)} @change=${(e:any)=>{try {this.change('effectiveFrom',isoFromLocal(e.target.value))} catch(err:any){this.message=err.message}}} /></label>\n </div>\n <div class=\"scroll\"><table><thead><tr>${['name','fromDate','fromTime','toDate','toTime','daysOfWeek'].map(f=>html`<th>${t(f)}</th>`)}<th></th></tr></thead><tbody>\n ${this.draft.shifts.map((row:any,index:number)=>html`<tr>\n <td><input aria-label=${'name-'+index} .value=${row.name} @input=${(e:any)=>this.changeShift(index,'name',e.target.value)} />\n <label>${t('description')}<input aria-label=${'description-'+index} .value=${row.description ?? ''} @input=${(e:any)=>this.changeShift(index,'description',e.target.value)} /></label></td>\n ${['from','to'].map(side=>html`<td><select aria-label=${side+'Date-'+index} @change=${(e:any)=>this.changeShift(index,side+'Date',Number(e.target.value))}>${[-1,0,1].map(d=>html`<option value=${d} .selected=${d === row[side+'Date']}>${t('day-offset-'+d)}</option>`)}</select></td>\n <td><input aria-label=${side+'Time-'+index} type=\"time\" .value=${row[side+'Time']} @input=${(e:any)=>this.changeShift(index,side+'Time',e.target.value)} /></td>`)}\n <td>${this.weekdays(row,index)}</td><td><button ?disabled=${this.draft.shifts.length===1} @click=${()=>this.change('shifts',this.draft.shifts.filter((_:any,i:number)=>i!==index))}>${t('remove')}</button></td>\n </tr>`)}\n </tbody></table></div><button @click=${()=>this.change('shifts',[...this.draft.shifts,{name:'',fromDate:0,fromTime:'16:00',toDate:1,toTime:'00:00',daysOfWeek:''}])}>${t('add-shift')}</button>\n <p class=\"notice\">${t('shift-impact')}</p>\n <div class=\"bar\"><button ?disabled=${this.busy} @click=${()=>this.save()}>${t('save-draft')}</button>\n <button class=\"primary\" ?disabled=${this.busy || (this.overview.approvalRequired && (this.dirty || !this.draft.id))} @click=${()=>this.submit()}>${this.overview.approvalRequired ? t('request-approval') : i18next.t('button.save')}</button></div>`}\n <button ?disabled=${this.busy} @click=${()=>{if(!this.dirty || window.confirm(t('discard-changes'))){this.draft=undefined;this.dirty=false}}}>${t('close-editor')}</button>\n ${this.draft.id ? html`<ops-master-revision-comparison axis=\"workShift\" .before=${base} .after=${this.draft}></ops-master-revision-comparison>` : ''}\n </section>` : ''}\n ${this.overview ? html`<section><h2>${t('history')}</h2>${[...this.overview.revisions].reverse().map((row:any)=>{\n const period=this.overview.schedule.find((s:any)=>s.revisionId===row.id), status=this.statuses[row.id]\n return html`<div class=\"bar\"><button ?disabled=${this.dirty} @click=${()=>{this.draft=structuredClone(row);this.dirty=false}}>${t('revision-value',{n:row.revisionNumber})}</button><span class=\"pill\">${t(this.rowStatus(row))}</span>\n <span>${period ? html`${revisionDate(period.validFrom)} → ${period.validTo ? revisionDate(period.validTo) : t('until-change')}` : html`${t('effectiveFrom')}: ${revisionDate(row.effectiveFrom)}`}</span>\n ${status?.comment ? html`<span>${status.comment}</span>` : ''}${status?.open ? html`<button @click=${()=>status.open()}>${t('approval-detail')}</button>` : ''}\n <button ?disabled=${this.dirty} @click=${()=>this.begin(row)}>${t('create-change')}</button></div>`\n })}</section>` : ''}\n </div>`\n }\n}\n"]}
|