@flowselections/admin-installatietechniek 1.0.2 → 1.0.3
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-lib/components/AdminForInstallatieTechniek.d.ts.map +1 -1
- package/dist-lib/components/AdminForInstallatieTechniek.js +95 -5
- package/dist-lib/hooks/useModuleOrder.d.ts +30 -0
- package/dist-lib/hooks/useModuleOrder.d.ts.map +1 -0
- package/dist-lib/hooks/useModuleOrder.js +99 -0
- package/dist-lib/index.d.ts +2 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +3 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +3 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +3 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +3 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/admin.functions.d.ts +41663 -0
- package/dist-lib/lib/admin.functions.d.ts.map +1 -1
- package/dist-lib/lib/admin.functions.js +50 -0
- package/dist-lib/lib/moduleDiscovery.js +3 -3
- package/package.json +1 -1
|
@@ -23,6 +23,9 @@ const setUserPermissionInput = z.object({
|
|
|
23
23
|
const userPermissionsInput = z.object({
|
|
24
24
|
userId: z.string().uuid(),
|
|
25
25
|
});
|
|
26
|
+
const moduleOrderInput = z.object({
|
|
27
|
+
moduleIds: z.array(z.string().trim().min(1).max(100)).max(200),
|
|
28
|
+
});
|
|
26
29
|
const assignRoleInput = z.object({
|
|
27
30
|
userId: z.string().uuid(),
|
|
28
31
|
role: roleSchema,
|
|
@@ -187,6 +190,53 @@ export const syncModuleRegistry = createServerFn({ method: "POST" })
|
|
|
187
190
|
}
|
|
188
191
|
return { ok: true, count: modules.length };
|
|
189
192
|
});
|
|
193
|
+
/**
|
|
194
|
+
* Volgorde van modules in de zijbalk. Leesbaar voor elke ingelogde gebruiker,
|
|
195
|
+
* zodat de shell hem kan toepassen.
|
|
196
|
+
*/
|
|
197
|
+
export const getModuleOrder = createServerFn({ method: "GET" })
|
|
198
|
+
.middleware([requireSupabaseAuth])
|
|
199
|
+
.handler(async ({ context }) => {
|
|
200
|
+
const { data, error } = await context.supabase
|
|
201
|
+
.from("module_registry")
|
|
202
|
+
.select("module_id, name, sort_order, is_active")
|
|
203
|
+
.eq("is_active", true);
|
|
204
|
+
if (error)
|
|
205
|
+
throw error;
|
|
206
|
+
const safe = Array.isArray(data) ? data : [];
|
|
207
|
+
// Rijen zonder sort_order blijven `null`: de client bepaalt hun plek op
|
|
208
|
+
// basis van de bronvolgorde van de shell (geen alfabetische fallback).
|
|
209
|
+
return {
|
|
210
|
+
modules: safe
|
|
211
|
+
.map((row) => ({
|
|
212
|
+
id: row.module_id,
|
|
213
|
+
name: row.name,
|
|
214
|
+
sortOrder: typeof row.sort_order === "number" ? row.sort_order : null,
|
|
215
|
+
}))
|
|
216
|
+
.sort((a, b) => {
|
|
217
|
+
const ao = a.sortOrder ?? Number.MAX_SAFE_INTEGER;
|
|
218
|
+
const bo = b.sortOrder ?? Number.MAX_SAFE_INTEGER;
|
|
219
|
+
return ao - bo;
|
|
220
|
+
}),
|
|
221
|
+
};
|
|
222
|
+
});
|
|
223
|
+
/** Slaat de volgorde op: index in de aangeleverde lijst wordt sort_order. */
|
|
224
|
+
export const setModuleOrder = createServerFn({ method: "POST" })
|
|
225
|
+
.middleware([requireSupabaseAuth])
|
|
226
|
+
.inputValidator((data) => moduleOrderInput.parse(data))
|
|
227
|
+
.handler(async ({ context, data }) => {
|
|
228
|
+
await requireAdmin(context);
|
|
229
|
+
const ids = Array.isArray(data.moduleIds) ? data.moduleIds : [];
|
|
230
|
+
for (let i = 0; i < ids.length; i++) {
|
|
231
|
+
const { error } = await context.supabase
|
|
232
|
+
.from("module_registry")
|
|
233
|
+
.update({ sort_order: i })
|
|
234
|
+
.eq("module_id", ids[i]);
|
|
235
|
+
if (error)
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
return { ok: true, count: ids.length };
|
|
239
|
+
});
|
|
190
240
|
export const getModulePermissions = createServerFn({ method: "GET" })
|
|
191
241
|
.middleware([requireSupabaseAuth])
|
|
192
242
|
.handler(async ({ context }) => {
|
|
@@ -46,9 +46,9 @@ export function useDiscoveredModules() {
|
|
|
46
46
|
found.set(first, (isTopLevel && title?.trim()) || existing || prettify(first));
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
// Geen alfabetische sortering: de volgorde van de routeboom is de
|
|
50
|
+
// standaardvolgorde van de shell.
|
|
51
|
+
return Array.from(found.entries()).map(([id, name]) => ({ id, name }));
|
|
52
52
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
53
53
|
}, [ids]);
|
|
54
54
|
}
|