admin: category drag-and-drop reorder + modal-based license key management

- Add sortOrder column to ProclamationCategory with migration
- Implement drag-and-drop reorder in AdminTable with persist-to-DB
- Refactor AdminTable to use $derived + dragOverride (no $effect sync)
- Replace window.location.reload with invalidateAll for reorder

- Convert license key create to modal with subscription level dropdown
- Add LicenseKeyForm.svelte following the CategoryForm pattern
- Add replace action (delete + generate new key with same level)
- Remove deactivateOld checkbox; each key has its own level
- Use use:enhance with update() to refresh list after create/replace
This commit is contained in:
NeilClack
2026-07-08 12:59:55 -05:00
parent 93d941569e
commit 6266be0edf
31 changed files with 21102 additions and 23217 deletions
+38 -32
View File
@@ -1,83 +1,89 @@
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
// @ts-nocheck
/*
* This file should be your main import to use Prisma-related types and utilities in a browser.
* This file should be your main import to use Prisma-related types and utilities in a browser.
* Use it to get access to models, enums, and input types.
*
*
* This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only.
* See `client.ts` for the standard, server-side entry point.
*
* 🟢 You can import this file directly.
*/
import * as Prisma from './internal/prismaNamespaceBrowser.ts';
export { Prisma };
export * as $Enums from './enums.ts';
import * as Prisma from './internal/prismaNamespaceBrowser.ts'
export { Prisma }
export * as $Enums from './enums.ts'
export * from './enums.ts';
/**
* Model User
*
*
*/
export type User = Prisma.UserModel;
export type User = Prisma.UserModel
/**
* Model Profile
*
*
*/
export type Profile = Prisma.ProfileModel;
export type Profile = Prisma.ProfileModel
/**
* Model Address
*
*
*/
export type Address = Prisma.AddressModel;
export type Address = Prisma.AddressModel
/**
* Model Session
*
*
*/
export type Session = Prisma.SessionModel;
export type Session = Prisma.SessionModel
/**
* Model Account
*
*
*/
export type Account = Prisma.AccountModel;
export type Account = Prisma.AccountModel
/**
* Model UserRole
*
*
*/
export type UserRole = Prisma.UserRoleModel;
export type UserRole = Prisma.UserRoleModel
/**
* Model Verification
*
*
*/
export type Verification = Prisma.VerificationModel;
export type Verification = Prisma.VerificationModel
/**
* Model Proclamation
*
*
*/
export type Proclamation = Prisma.ProclamationModel;
export type Proclamation = Prisma.ProclamationModel
/**
* Model UserProclamations
*
*
*/
export type UserProclamations = Prisma.UserProclamationsModel;
export type UserProclamations = Prisma.UserProclamationsModel
/**
* Model SolfeggioFrequency
*
*
*/
export type SolfeggioFrequency = Prisma.SolfeggioFrequencyModel;
export type SolfeggioFrequency = Prisma.SolfeggioFrequencyModel
/**
* Model ProclamationCategory
*
*
*/
export type ProclamationCategory = Prisma.ProclamationCategoryModel;
export type ProclamationCategory = Prisma.ProclamationCategoryModel
/**
* Model ProclamationCategorySubscriptionLevel
*
*/
export type ProclamationCategorySubscriptionLevel = Prisma.ProclamationCategorySubscriptionLevelModel
/**
* Model LicenseKey
*
*
*/
export type LicenseKey = Prisma.LicenseKeyModel;
export type LicenseKey = Prisma.LicenseKeyModel
/**
* Model SubscriptionLevel
*
*
*/
export type SubscriptionLevel = Prisma.SubscriptionLevelModel;
export type SubscriptionLevel = Prisma.SubscriptionLevelModel