@7365admin1/layer-common 4.1.2-staging.246 → 4.1.2
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @iservice365/layer-common
|
|
2
2
|
|
|
3
|
+
## 4.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 89deaab: Check the permission the estate stores for the Bulletin Board gates
|
|
8
|
+
|
|
9
|
+
`useBulletinBoardPermission` asked for `bulletin-board:<action>`, a resource held
|
|
10
|
+
by 8-9 of the 428 roles in the live catalogue, while the same five actions under
|
|
11
|
+
`bulletin-board-mgmt:` are held by 80-82. `-hygiene`, `-security` and
|
|
12
|
+
`-pest-control` leave `canViewBulletinBoardDetails` unbound, so this composable
|
|
13
|
+
gates their sidebar-linked bulletin board page and ~74 roles that hold the right
|
|
14
|
+
were refused it.
|
|
15
|
+
|
|
16
|
+
Both resources are now accepted, and the list gate also accepts the singular
|
|
17
|
+
`see-all-bulletin-board` action that 80 roles store. No key is renamed, nothing
|
|
18
|
+
is granted and no role document changes.
|
|
19
|
+
|
|
3
20
|
## 4.1.1
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
|
@@ -313,11 +330,11 @@
|
|
|
313
330
|
`utils/console-tier.ts` + `composables/useConsoleTier.ts` mirror the server's
|
|
314
331
|
own rule from two endpoints the console already calls, unprojected:
|
|
315
332
|
|
|
316
|
-
|
|
317
|
-
|
|
333
|
+
GET /api/members/user/:user/app/admin the Seven365 staff membership
|
|
334
|
+
GET /api/roles/id/:role that membership's role document
|
|
318
335
|
|
|
319
|
-
|
|
320
|
-
|
|
336
|
+
owner = member.type === "admin" && role.type === "admin" && role.default === true
|
|
337
|
+
staff = member.type === "admin" && role.type === "admin"
|
|
321
338
|
|
|
322
339
|
`role.default` is the marker because it is the only property of a platform
|
|
323
340
|
staff role no API caller can set - `role.controller.ts` validates create and
|
|
@@ -35,15 +35,9 @@ const dateFormattedReadOnly = ref<string | null>(null)
|
|
|
35
35
|
|
|
36
36
|
const dateInput = ref<HTMLInputElement | null>(null)
|
|
37
37
|
const datePickerRef = ref<HTMLInputElement | null>(null)
|
|
38
|
-
let nativeInput: HTMLInputElement | null = null
|
|
39
38
|
|
|
40
39
|
const isInitialLoad = ref(true)
|
|
41
40
|
|
|
42
|
-
function handleNativeInputClick(e: MouseEvent) {
|
|
43
|
-
e.stopPropagation()
|
|
44
|
-
openDatePicker()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
41
|
function clearDate() {
|
|
48
42
|
date.value = null
|
|
49
43
|
dateFormattedReadOnly.value = null
|
|
@@ -94,17 +88,15 @@ watch(date, () => {
|
|
|
94
88
|
onMounted(async () => {
|
|
95
89
|
await nextTick()
|
|
96
90
|
isInitialLoad.value = false
|
|
97
|
-
nativeInput = (datePickerRef.value as any)?.$el?.querySelector('input')
|
|
91
|
+
const nativeInput = (datePickerRef.value as any)?.$el?.querySelector('input')
|
|
98
92
|
if (nativeInput) {
|
|
99
|
-
nativeInput.addEventListener('click',
|
|
93
|
+
nativeInput.addEventListener('click', (e: MouseEvent) => {
|
|
94
|
+
e.stopPropagation()
|
|
95
|
+
openDatePicker()
|
|
96
|
+
})
|
|
100
97
|
}
|
|
101
98
|
})
|
|
102
99
|
|
|
103
|
-
onBeforeUnmount(() => {
|
|
104
|
-
nativeInput?.removeEventListener('click', handleNativeInputClick)
|
|
105
|
-
nativeInput = null
|
|
106
|
-
})
|
|
107
|
-
|
|
108
100
|
defineExpose({
|
|
109
101
|
validate
|
|
110
102
|
})
|
|
@@ -70,15 +70,9 @@ const inputPlaceholder = computed(
|
|
|
70
70
|
|
|
71
71
|
const dateInput = ref<HTMLInputElement | null>(null);
|
|
72
72
|
const dateTimePickerRef = ref<HTMLInputElement | null>(null);
|
|
73
|
-
let nativeInput: HTMLInputElement | null = null;
|
|
74
73
|
|
|
75
74
|
const isInitialLoad = ref(true);
|
|
76
75
|
|
|
77
|
-
function handleNativeInputClick(e: MouseEvent) {
|
|
78
|
-
e.stopPropagation();
|
|
79
|
-
openDatePicker();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
76
|
function openDatePicker() {
|
|
83
77
|
setTimeout(() => {
|
|
84
78
|
dateInput.value?.showPicker?.();
|
|
@@ -183,19 +177,17 @@ onMounted(async () => {
|
|
|
183
177
|
await nextTick();
|
|
184
178
|
isInitialLoad.value = false;
|
|
185
179
|
// Wait until Vuetify renders its internal input
|
|
186
|
-
nativeInput = (dateTimePickerRef.value as any)?.$el?.querySelector(
|
|
180
|
+
const nativeInput = (dateTimePickerRef.value as any)?.$el?.querySelector(
|
|
187
181
|
"input"
|
|
188
182
|
);
|
|
189
183
|
if (nativeInput) {
|
|
190
|
-
nativeInput.addEventListener("click",
|
|
184
|
+
nativeInput.addEventListener("click", (e: MouseEvent) => {
|
|
185
|
+
e.stopPropagation();
|
|
186
|
+
openDatePicker();
|
|
187
|
+
});
|
|
191
188
|
}
|
|
192
189
|
});
|
|
193
190
|
|
|
194
|
-
onBeforeUnmount(() => {
|
|
195
|
-
nativeInput?.removeEventListener("click", handleNativeInputClick);
|
|
196
|
-
nativeInput = null;
|
|
197
|
-
});
|
|
198
|
-
|
|
199
191
|
defineExpose({
|
|
200
192
|
validate,
|
|
201
193
|
});
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@7365admin1/layer-common",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "4.1.2
|
|
5
|
+
"version": "4.1.2",
|
|
6
6
|
"author": "7365admin1",
|
|
7
7
|
"main": "./nuxt.config.ts",
|
|
8
8
|
"//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",
|