@things-factory/calendar 10.1.254 → 10.1.257
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/calendar/calendar-days-off-page.d.ts +2 -1
- package/dist-client/pages/calendar/calendar-days-off-page.js +15 -24
- package/dist-client/pages/calendar/calendar-days-off-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/index.d.ts +1 -0
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/work-doors.d.ts +1 -0
- package/dist-server/work-doors.js +11 -0
- package/dist-server/work-doors.js.map +1 -0
- package/package.json +5 -5
- package/tests/open-doors.test.ts +5 -3
- package/translations/en.json +2 -1
- package/translations/es.json +2 -1
- package/translations/ja.json +2 -1
- package/translations/ko.json +2 -1
- package/translations/ms.json +2 -1
- package/translations/zh.json +2 -1
|
@@ -10,7 +10,8 @@ export declare class CalendarDaysOffPage extends CalendarDaysOffPage_base {
|
|
|
10
10
|
static styles: import("lit").CSSResult[];
|
|
11
11
|
gristConfig: any;
|
|
12
12
|
private calendarId;
|
|
13
|
-
private
|
|
13
|
+
private calendar;
|
|
14
|
+
private get calendarName();
|
|
14
15
|
private grist;
|
|
15
16
|
get context(): {
|
|
16
17
|
title: string;
|
|
@@ -5,7 +5,7 @@ import { PageView } from '@operato/shell';
|
|
|
5
5
|
import { html } from 'lit';
|
|
6
6
|
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
7
7
|
import { DataGrist } from '@operato/data-grist';
|
|
8
|
-
import { client } from '@operato/graphql';
|
|
8
|
+
import { client, QueryController } from '@operato/graphql';
|
|
9
9
|
import { i18next, localize } from '@operato/i18n';
|
|
10
10
|
import { notify } from '@operato/layout';
|
|
11
11
|
import gql from 'graphql-tag';
|
|
@@ -21,9 +21,19 @@ let CalendarDaysOffPage = class CalendarDaysOffPage extends localize(i18next)(Pa
|
|
|
21
21
|
constructor() {
|
|
22
22
|
super(...arguments);
|
|
23
23
|
this.calendarId = '';
|
|
24
|
-
|
|
24
|
+
/* The name of the calendar the address names, for the title (ADR-0190). */
|
|
25
|
+
this.calendar = new QueryController(this, gql `
|
|
26
|
+
query ($id: String!) {
|
|
27
|
+
calendar(id: $id) {
|
|
28
|
+
name
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`, { variables: () => (this.calendarId ? { id: this.calendarId } : undefined) });
|
|
25
32
|
}
|
|
26
33
|
static { this.styles = [WorkSurfacePageStyles, ScrollbarStyles, CommonGristStyles]; }
|
|
34
|
+
get calendarName() {
|
|
35
|
+
return this.calendar.data?.calendar?.name ?? '';
|
|
36
|
+
}
|
|
27
37
|
get context() {
|
|
28
38
|
return {
|
|
29
39
|
title: this.calendarName ? `${i18next.t('title.calendar-days-off')} · ${this.calendarName}` : i18next.t('title.calendar-days-off'),
|
|
@@ -57,32 +67,17 @@ let CalendarDaysOffPage = class CalendarDaysOffPage extends localize(i18next)(Pa
|
|
|
57
67
|
rows: { selectable: { multiple: true } },
|
|
58
68
|
pagination: { infinite: true }
|
|
59
69
|
};
|
|
60
|
-
|
|
70
|
+
this.open(lifecycle?.params?.calendar || '');
|
|
61
71
|
}
|
|
62
72
|
async pageUpdated(changes, lifecycle) {
|
|
63
73
|
if (!this.active || !changes.params)
|
|
64
74
|
return;
|
|
65
75
|
const calendarId = lifecycle?.params?.calendar || '';
|
|
66
76
|
if (calendarId !== this.calendarId)
|
|
67
|
-
|
|
77
|
+
this.open(calendarId);
|
|
68
78
|
}
|
|
69
|
-
|
|
79
|
+
open(calendarId) {
|
|
70
80
|
this.calendarId = calendarId;
|
|
71
|
-
this.calendarName = '';
|
|
72
|
-
if (calendarId) {
|
|
73
|
-
const response = await client.query({
|
|
74
|
-
query: gql `
|
|
75
|
-
query ($id: String!) {
|
|
76
|
-
calendar(id: $id) {
|
|
77
|
-
name
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
`,
|
|
81
|
-
variables: { id: calendarId }
|
|
82
|
-
});
|
|
83
|
-
this.calendarName = response.data?.calendar?.name ?? '';
|
|
84
|
-
}
|
|
85
|
-
this.updateContext();
|
|
86
81
|
this.grist?.fetch();
|
|
87
82
|
}
|
|
88
83
|
async fetchHandler() {
|
|
@@ -146,10 +141,6 @@ __decorate([
|
|
|
146
141
|
state(),
|
|
147
142
|
__metadata("design:type", Object)
|
|
148
143
|
], CalendarDaysOffPage.prototype, "calendarId", void 0);
|
|
149
|
-
__decorate([
|
|
150
|
-
state(),
|
|
151
|
-
__metadata("design:type", Object)
|
|
152
|
-
], CalendarDaysOffPage.prototype, "calendarName", void 0);
|
|
153
144
|
__decorate([
|
|
154
145
|
query('ox-grist'),
|
|
155
146
|
__metadata("design:type", DataGrist)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-days-off-page.js","sourceRoot":"","sources":["../../../client/pages/calendar/calendar-days-off-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\n\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { DataGrist } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\n\nimport gql from 'graphql-tag'\n\nimport { sureToDelete } from '../sure-to-delete'\n\n/** The longest day off one row holds - the server's DAYS_OFF_MAX_SPAN, said next to the field. */\nconst DAYS_OFF_MAX_SPAN = 31\n\n/**\n * A days-off calendar's days (ADR-0179): the company's days off written as rows from one day to another - 창립기념일,\n * 하계 휴무. Each counts at once: leave skips it, the calendars paint it. Opened from the calendar's row; the public\n * holiday calendar is the import's and is read on the event list instead.\n */\n@customElement('calendar-days-off-page')\nexport class CalendarDaysOffPage extends localize(i18next)(PageView) {\n static styles = [WorkSurfacePageStyles, ScrollbarStyles, CommonGristStyles]\n\n @property({ type: Object }) gristConfig: any\n\n @state() private calendarId = ''\n @state() private calendarName = ''\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: this.calendarName ? `${i18next.t('title.calendar-days-off')} · ${this.calendarName}` : i18next.t('title.calendar-days-off'),\n help: 'calendar/calendar',\n /* The days of a calendar - the menu marks the calendars. */\n menu: 'calendar-list',\n actions: [\n { title: i18next.t('button.save'), action: this.save.bind(this), ...CommonButtonStyles.save },\n { title: i18next.t('button.delete'), action: this.delete.bind(this), ...CommonButtonStyles.delete }\n ]\n }\n }\n\n render() {\n return html`<ox-grist class=\"page-fill\" mode=\"GRID\" .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}></ox-grist>`\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n { type: 'string', name: 'name', header: i18next.t('field.name'), record: { editable: true, mandatory: true }, width: 200 },\n { type: 'date', name: 'from', header: i18next.t('field.days-off-from'), record: { editable: true, mandatory: true }, width: 130 },\n {\n type: 'date',\n name: 'to',\n header: i18next.t('field.days-off-to'),\n record: { editable: true, hint: i18next.t('text.days-off-to-hint', { max: DAYS_OFF_MAX_SPAN }) },\n width: 130\n }\n ],\n rows: { selectable: { multiple: true } },\n pagination: { infinite: true }\n }\n await this.open(lifecycle?.params?.calendar || '')\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (!this.active || !changes.params) return\n const calendarId = lifecycle?.params?.calendar || ''\n if (calendarId !== this.calendarId) await this.open(calendarId)\n }\n\n private async open(calendarId: string) {\n this.calendarId = calendarId\n this.calendarName = ''\n if (calendarId) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n calendar(id: $id) {\n name\n }\n }\n `,\n variables: { id: calendarId }\n })\n this.calendarName = response.data?.calendar?.name ?? ''\n }\n this.updateContext()\n this.grist?.fetch()\n }\n\n async fetchHandler() {\n if (!this.calendarId) return { total: 0, records: [] }\n const response = await client.query({\n query: gql`\n query ($calendarId: String!) {\n calendarDaysOff(calendarId: $calendarId) {\n id\n name\n from\n to\n }\n }\n `,\n variables: { calendarId: this.calendarId },\n fetchPolicy: 'no-cache'\n })\n const records = response.data?.calendarDaysOff ?? []\n return { total: records.length, records }\n }\n\n private async write(patches: any[]) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($calendarId: String!, $patches: [DayOffSpanPatch!]!) {\n updateCalendarDaysOff(calendarId: $calendarId, patches: $patches)\n }\n `,\n variables: { calendarId: this.calendarId, patches }\n })\n if (!response.errors) {\n this.grist.fetch()\n return true\n }\n return false\n }\n\n private async save() {\n const patches = (this.grist.dirtyRecords || []).map((row: any) => {\n const patch: any = { cuFlag: row.__dirty__, ...(row.id ? { id: row.id } : {}) }\n for (const key in row.__dirtyfields__) patch[key] = row.__dirtyfields__[key].after || undefined\n return patch\n })\n if (patches.length && (await this.write(patches))) notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.save') }) })\n }\n\n private async delete() {\n const ids = this.grist.selected.map((row: any) => row.id).filter(Boolean)\n if (!ids.length || !(await sureToDelete())) return\n if (await this.write(ids.map((id: string) => ({ id, cuFlag: '-' })))) notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') }) })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"calendar-days-off-page.js","sourceRoot":"","sources":["../../../client/pages/calendar/calendar-days-off-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\n\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { DataGrist } from '@operato/data-grist'\nimport { client, QueryController } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\n\nimport gql from 'graphql-tag'\n\nimport { sureToDelete } from '../sure-to-delete'\n\n/** The longest day off one row holds - the server's DAYS_OFF_MAX_SPAN, said next to the field. */\nconst DAYS_OFF_MAX_SPAN = 31\n\n/**\n * A days-off calendar's days (ADR-0179): the company's days off written as rows from one day to another - 창립기념일,\n * 하계 휴무. Each counts at once: leave skips it, the calendars paint it. Opened from the calendar's row; the public\n * holiday calendar is the import's and is read on the event list instead.\n */\n@customElement('calendar-days-off-page')\nexport class CalendarDaysOffPage extends localize(i18next)(PageView) {\n static styles = [WorkSurfacePageStyles, ScrollbarStyles, CommonGristStyles]\n\n @property({ type: Object }) gristConfig: any\n\n @state() private calendarId = ''\n\n /* The name of the calendar the address names, for the title (ADR-0190). */\n private calendar = new QueryController(\n this,\n gql`\n query ($id: String!) {\n calendar(id: $id) {\n name\n }\n }\n `,\n { variables: () => (this.calendarId ? { id: this.calendarId } : undefined) }\n )\n\n private get calendarName(): string {\n return this.calendar.data?.calendar?.name ?? ''\n }\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: this.calendarName ? `${i18next.t('title.calendar-days-off')} · ${this.calendarName}` : i18next.t('title.calendar-days-off'),\n help: 'calendar/calendar',\n /* The days of a calendar - the menu marks the calendars. */\n menu: 'calendar-list',\n actions: [\n { title: i18next.t('button.save'), action: this.save.bind(this), ...CommonButtonStyles.save },\n { title: i18next.t('button.delete'), action: this.delete.bind(this), ...CommonButtonStyles.delete }\n ]\n }\n }\n\n render() {\n return html`<ox-grist class=\"page-fill\" mode=\"GRID\" .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}></ox-grist>`\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n { type: 'string', name: 'name', header: i18next.t('field.name'), record: { editable: true, mandatory: true }, width: 200 },\n { type: 'date', name: 'from', header: i18next.t('field.days-off-from'), record: { editable: true, mandatory: true }, width: 130 },\n {\n type: 'date',\n name: 'to',\n header: i18next.t('field.days-off-to'),\n record: { editable: true, hint: i18next.t('text.days-off-to-hint', { max: DAYS_OFF_MAX_SPAN }) },\n width: 130\n }\n ],\n rows: { selectable: { multiple: true } },\n pagination: { infinite: true }\n }\n this.open(lifecycle?.params?.calendar || '')\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (!this.active || !changes.params) return\n const calendarId = lifecycle?.params?.calendar || ''\n if (calendarId !== this.calendarId) this.open(calendarId)\n }\n\n private open(calendarId: string) {\n this.calendarId = calendarId\n this.grist?.fetch()\n }\n\n async fetchHandler() {\n if (!this.calendarId) return { total: 0, records: [] }\n const response = await client.query({\n query: gql`\n query ($calendarId: String!) {\n calendarDaysOff(calendarId: $calendarId) {\n id\n name\n from\n to\n }\n }\n `,\n variables: { calendarId: this.calendarId },\n fetchPolicy: 'no-cache'\n })\n const records = response.data?.calendarDaysOff ?? []\n return { total: records.length, records }\n }\n\n private async write(patches: any[]) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($calendarId: String!, $patches: [DayOffSpanPatch!]!) {\n updateCalendarDaysOff(calendarId: $calendarId, patches: $patches)\n }\n `,\n variables: { calendarId: this.calendarId, patches }\n })\n if (!response.errors) {\n this.grist.fetch()\n return true\n }\n return false\n }\n\n private async save() {\n const patches = (this.grist.dirtyRecords || []).map((row: any) => {\n const patch: any = { cuFlag: row.__dirty__, ...(row.id ? { id: row.id } : {}) }\n for (const key in row.__dirtyfields__) patch[key] = row.__dirtyfields__[key].after || undefined\n return patch\n })\n if (patches.length && (await this.write(patches))) notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.save') }) })\n }\n\n private async delete() {\n const ids = this.grist.selected.map((row: any) => row.id).filter(Boolean)\n if (!ids.length || !(await sureToDelete())) return\n if (await this.write(ids.map((id: string) => ({ id, cuFlag: '-' })))) notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') }) })\n }\n}\n"]}
|