@ph-cms/client-sdk-admin 0.1.1
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/LICENSE +21 -0
- package/dist/client.d.ts +17 -0
- package/dist/client.js +22 -0
- package/dist/context.d.ts +10 -0
- package/dist/context.js +53 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +7 -0
- package/dist/hooks/useDashboard.d.ts +16 -0
- package/dist/hooks/useDashboard.js +13 -0
- package/dist/hooks/useHierarchy.d.ts +34 -0
- package/dist/hooks/useHierarchy.js +31 -0
- package/dist/hooks/usePolicy.d.ts +23 -0
- package/dist/hooks/usePolicy.js +19 -0
- package/dist/hooks/useSystem.d.ts +17 -0
- package/dist/hooks/useSystem.js +29 -0
- package/dist/hooks/useTerms.d.ts +26 -0
- package/dist/hooks/useTerms.js +19 -0
- package/dist/hooks/useUser.d.ts +108 -0
- package/dist/hooks/useUser.js +66 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +35 -0
- package/dist/modules/dashboard.d.ts +7 -0
- package/dist/modules/dashboard.js +12 -0
- package/dist/modules/hierarchy.d.ts +14 -0
- package/dist/modules/hierarchy.js +33 -0
- package/dist/modules/policy.d.ts +11 -0
- package/dist/modules/policy.js +24 -0
- package/dist/modules/system.d.ts +21 -0
- package/dist/modules/system.js +24 -0
- package/dist/modules/terms.d.ts +11 -0
- package/dist/modules/terms.js +21 -0
- package/dist/modules/user.d.ts +11 -0
- package/dist/modules/user.js +44 -0
- package/package.json +42 -0
- package/src/client.ts +28 -0
- package/src/context.tsx +35 -0
- package/src/errors.ts +1 -0
- package/src/hooks/useDashboard.ts +10 -0
- package/src/hooks/useHierarchy.ts +30 -0
- package/src/hooks/usePolicy.ts +18 -0
- package/src/hooks/useSystem.ts +26 -0
- package/src/hooks/useTerms.ts +18 -0
- package/src/hooks/useUser.ts +69 -0
- package/src/index.ts +17 -0
- package/src/modules/dashboard.ts +10 -0
- package/src/modules/hierarchy.ts +38 -0
- package/src/modules/policy.ts +26 -0
- package/src/modules/system.ts +23 -0
- package/src/modules/terms.ts +23 -0
- package/src/modules/user.ts +47 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HierarchyModule = void 0;
|
|
4
|
+
class HierarchyModule {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
async list(params) {
|
|
9
|
+
return this.client.get('/api/hierarchy', { params });
|
|
10
|
+
}
|
|
11
|
+
async get(uid) {
|
|
12
|
+
return this.client.get(`/api/hierarchy/${uid}`);
|
|
13
|
+
}
|
|
14
|
+
async create(data) {
|
|
15
|
+
return this.client.post('/api/hierarchy', data);
|
|
16
|
+
}
|
|
17
|
+
async update(uid, data) {
|
|
18
|
+
return this.client.put(`/api/hierarchy/${uid}`, data);
|
|
19
|
+
}
|
|
20
|
+
async delete(uid) {
|
|
21
|
+
return this.client.delete(`/api/hierarchy/${uid}`);
|
|
22
|
+
}
|
|
23
|
+
async listItems(setUid) {
|
|
24
|
+
return this.client.get(`/api/hierarchy/${setUid}/items`);
|
|
25
|
+
}
|
|
26
|
+
async addItem(setUid, data) {
|
|
27
|
+
return this.client.post(`/api/hierarchy/${setUid}/items`, data);
|
|
28
|
+
}
|
|
29
|
+
async removeItem(setUid, itemUid) {
|
|
30
|
+
return this.client.delete(`/api/hierarchy/${setUid}/items/${itemUid}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.HierarchyModule = HierarchyModule;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { PermissionPolicySetDto, CreatePermissionPolicySetRequest, UpdatePermissionPolicySetRequest, ListPolicyQuery, PagedPermissionPolicySetListResponse } from "@ph-cms/api-contract-admin";
|
|
3
|
+
export declare class PolicyModule {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: AxiosInstance);
|
|
6
|
+
list(params?: ListPolicyQuery): Promise<PagedPermissionPolicySetListResponse>;
|
|
7
|
+
get(uid: string): Promise<PermissionPolicySetDto>;
|
|
8
|
+
create(data: CreatePermissionPolicySetRequest): Promise<PermissionPolicySetDto>;
|
|
9
|
+
update(uid: string, data: UpdatePermissionPolicySetRequest): Promise<PermissionPolicySetDto>;
|
|
10
|
+
delete(uid: string): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolicyModule = void 0;
|
|
4
|
+
class PolicyModule {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
async list(params) {
|
|
9
|
+
return this.client.get('/api/policies', { params });
|
|
10
|
+
}
|
|
11
|
+
async get(uid) {
|
|
12
|
+
return this.client.get(`/api/policies/${uid}`);
|
|
13
|
+
}
|
|
14
|
+
async create(data) {
|
|
15
|
+
return this.client.post('/api/policies', data);
|
|
16
|
+
}
|
|
17
|
+
async update(uid, data) {
|
|
18
|
+
return this.client.put(`/api/policies/${uid}`, data);
|
|
19
|
+
}
|
|
20
|
+
async delete(uid) {
|
|
21
|
+
return this.client.delete(`/api/policies/${uid}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.PolicyModule = PolicyModule;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class SystemModule {
|
|
2
|
+
private client;
|
|
3
|
+
constructor(client: any);
|
|
4
|
+
getDbTables(): Promise<{
|
|
5
|
+
name: string;
|
|
6
|
+
columns: string[];
|
|
7
|
+
}[]>;
|
|
8
|
+
executeQuery(sql: string): Promise<{
|
|
9
|
+
rows: any[];
|
|
10
|
+
fields: string[];
|
|
11
|
+
rowCount: number;
|
|
12
|
+
}>;
|
|
13
|
+
getTableData(tableName: string, page?: number, limit?: number): Promise<{
|
|
14
|
+
rows: any[];
|
|
15
|
+
fields: string[];
|
|
16
|
+
page: number;
|
|
17
|
+
limit: number;
|
|
18
|
+
total: number;
|
|
19
|
+
totalPages: number;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SystemModule = void 0;
|
|
4
|
+
const api_contract_admin_1 = require("@ph-cms/api-contract-admin");
|
|
5
|
+
class SystemModule {
|
|
6
|
+
constructor(client) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
async getDbTables() {
|
|
10
|
+
const response = await this.client.get("/api/system/db/tables");
|
|
11
|
+
return api_contract_admin_1.DbTablesResponseSchema.parse(response);
|
|
12
|
+
}
|
|
13
|
+
async executeQuery(sql) {
|
|
14
|
+
const response = await this.client.post("/api/system/db/query", { sql });
|
|
15
|
+
return api_contract_admin_1.ExecuteQueryResponseSchema.parse(response);
|
|
16
|
+
}
|
|
17
|
+
async getTableData(tableName, page = 1, limit = 20) {
|
|
18
|
+
const response = await this.client.get(`/api/system/db-data/${tableName}`, {
|
|
19
|
+
params: { page, limit }
|
|
20
|
+
});
|
|
21
|
+
return api_contract_admin_1.GetTableDataResponseSchema.parse(response);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.SystemModule = SystemModule;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { TermDto, ListTermsQuery, PagedTermListResponse } from "@ph-cms/api-contract";
|
|
3
|
+
import { CreateTermRequest } from "@ph-cms/api-contract-admin";
|
|
4
|
+
export declare class TermsModule {
|
|
5
|
+
private client;
|
|
6
|
+
constructor(client: AxiosInstance);
|
|
7
|
+
list(params?: ListTermsQuery): Promise<PagedTermListResponse>;
|
|
8
|
+
get(id: number): Promise<TermDto>;
|
|
9
|
+
create(data: CreateTermRequest): Promise<TermDto>;
|
|
10
|
+
disable(id: number): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TermsModule = void 0;
|
|
4
|
+
class TermsModule {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
async list(params) {
|
|
9
|
+
return this.client.get('/api/terms', { params });
|
|
10
|
+
}
|
|
11
|
+
async get(id) {
|
|
12
|
+
return this.client.get(`/api/terms/${id}`);
|
|
13
|
+
}
|
|
14
|
+
async create(data) {
|
|
15
|
+
return this.client.post('/api/terms', data);
|
|
16
|
+
}
|
|
17
|
+
async disable(id) {
|
|
18
|
+
return this.client.delete(`/api/terms/${id}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.TermsModule = TermsModule;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { ListUserQuery, CreateUserRequest, UpdateUserRequest, UserDto, PagedUserListResponse } from "@ph-cms/api-contract-admin";
|
|
3
|
+
export declare class UserModule {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: AxiosInstance);
|
|
6
|
+
list(params: ListUserQuery): Promise<PagedUserListResponse>;
|
|
7
|
+
get(uid: string): Promise<UserDto>;
|
|
8
|
+
create(data: CreateUserRequest): Promise<UserDto>;
|
|
9
|
+
update(uid: string, data: UpdateUserRequest): Promise<UserDto>;
|
|
10
|
+
delete(uid: string): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserModule = void 0;
|
|
4
|
+
const api_contract_admin_1 = require("@ph-cms/api-contract-admin");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
class UserModule {
|
|
7
|
+
constructor(client) {
|
|
8
|
+
this.client = client;
|
|
9
|
+
}
|
|
10
|
+
async list(params) {
|
|
11
|
+
const validation = api_contract_admin_1.ListUserQuerySchema.safeParse(params);
|
|
12
|
+
if (!validation.success) {
|
|
13
|
+
throw new errors_1.ValidationError("Invalid list user params", validation.error.errors);
|
|
14
|
+
}
|
|
15
|
+
return this.client.get('/api/users', { params });
|
|
16
|
+
}
|
|
17
|
+
async get(uid) {
|
|
18
|
+
if (!uid)
|
|
19
|
+
throw new errors_1.ValidationError("UID is required", []);
|
|
20
|
+
return this.client.get(`/api/users/${uid}`);
|
|
21
|
+
}
|
|
22
|
+
async create(data) {
|
|
23
|
+
const validation = api_contract_admin_1.CreateUserSchema.safeParse(data);
|
|
24
|
+
if (!validation.success) {
|
|
25
|
+
throw new errors_1.ValidationError("Invalid create user data", validation.error.errors);
|
|
26
|
+
}
|
|
27
|
+
return this.client.post('/api/users', data);
|
|
28
|
+
}
|
|
29
|
+
async update(uid, data) {
|
|
30
|
+
if (!uid)
|
|
31
|
+
throw new errors_1.ValidationError("UID is required", []);
|
|
32
|
+
const validation = api_contract_admin_1.UpdateUserSchema.safeParse(data);
|
|
33
|
+
if (!validation.success) {
|
|
34
|
+
throw new errors_1.ValidationError("Invalid update user data", validation.error.errors);
|
|
35
|
+
}
|
|
36
|
+
return this.client.patch(`/api/users/${uid}`, data);
|
|
37
|
+
}
|
|
38
|
+
async delete(uid) {
|
|
39
|
+
if (!uid)
|
|
40
|
+
throw new errors_1.ValidationError("UID is required", []);
|
|
41
|
+
return this.client.delete(`/api/users/${uid}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.UserModule = UserModule;
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ph-cms/client-sdk-admin",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Admin-only PH-CMS Client SDK",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"keywords": [],
|
|
8
|
+
"author": "",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@tanstack/react-query": "^5.0.0",
|
|
12
|
+
"axios": "^1.6.0",
|
|
13
|
+
"zod": "^3.22.4",
|
|
14
|
+
"@ph-cms/client-sdk": "0.1.1",
|
|
15
|
+
"@ph-cms/api-contract-admin": "0.1.0",
|
|
16
|
+
"@ph-cms/api-contract": "0.1.0"
|
|
17
|
+
},
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"react": ">=18.0.0",
|
|
20
|
+
"firebase": "^10.0.0"
|
|
21
|
+
},
|
|
22
|
+
"peerDependenciesMeta": {
|
|
23
|
+
"firebase": {
|
|
24
|
+
"optional": true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"react": "^18.3.1",
|
|
32
|
+
"react-dom": "^18.3.1",
|
|
33
|
+
"@types/react": "^18.3.1",
|
|
34
|
+
"@types/react-dom": "^18.3.1",
|
|
35
|
+
"@tanstack/react-query": "^5.0.0",
|
|
36
|
+
"typescript": "^5.3.3",
|
|
37
|
+
"firebase": "^10.0.0"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/client.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PHCMSClient } from "@ph-cms/client-sdk";
|
|
2
|
+
import { DashboardModule } from "./modules/dashboard";
|
|
3
|
+
import { HierarchyModule } from "./modules/hierarchy";
|
|
4
|
+
import { PolicyModule } from "./modules/policy";
|
|
5
|
+
import { SystemModule } from "./modules/system";
|
|
6
|
+
import { UserModule } from "./modules/user";
|
|
7
|
+
import { TermsModule } from "./modules/terms";
|
|
8
|
+
|
|
9
|
+
export class PHCMSAdminClient {
|
|
10
|
+
public readonly base: PHCMSClient;
|
|
11
|
+
public readonly dashboard: DashboardModule;
|
|
12
|
+
public readonly hierarchy: HierarchyModule;
|
|
13
|
+
public readonly policy: PolicyModule;
|
|
14
|
+
public readonly system: SystemModule;
|
|
15
|
+
public readonly user: UserModule;
|
|
16
|
+
public readonly terms: TermsModule;
|
|
17
|
+
|
|
18
|
+
constructor(baseClient: PHCMSClient) {
|
|
19
|
+
this.base = baseClient;
|
|
20
|
+
const axios = baseClient.axiosInstance;
|
|
21
|
+
this.dashboard = new DashboardModule(axios);
|
|
22
|
+
this.hierarchy = new HierarchyModule(axios);
|
|
23
|
+
this.policy = new PolicyModule(axios);
|
|
24
|
+
this.system = new SystemModule(axios);
|
|
25
|
+
this.user = new UserModule(axios);
|
|
26
|
+
this.terms = new TermsModule(axios);
|
|
27
|
+
}
|
|
28
|
+
}
|
package/src/context.tsx
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React, { createContext, useContext, ReactNode, useMemo } from 'react';
|
|
2
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
3
|
+
import { PHCMSAdminClient } from './client';
|
|
4
|
+
|
|
5
|
+
interface PHCMSAdminContextType {
|
|
6
|
+
client: PHCMSAdminClient;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const PHCMSAdminContext = createContext<PHCMSAdminContextType | null>(null);
|
|
10
|
+
|
|
11
|
+
export interface PHCMSAdminProviderProps {
|
|
12
|
+
client: PHCMSAdminClient;
|
|
13
|
+
queryClient?: QueryClient;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const PHCMSAdminProvider: React.FC<PHCMSAdminProviderProps> = ({ client, queryClient, children }) => {
|
|
18
|
+
const internalQueryClient = useMemo(() => queryClient ?? new QueryClient(), [queryClient]);
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<PHCMSAdminContext.Provider value={{ client }}>
|
|
22
|
+
<QueryClientProvider client={internalQueryClient}>
|
|
23
|
+
{children}
|
|
24
|
+
</QueryClientProvider>
|
|
25
|
+
</PHCMSAdminContext.Provider>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const usePHCMSAdmin = (): PHCMSAdminClient => {
|
|
30
|
+
const context = useContext(PHCMSAdminContext);
|
|
31
|
+
if (!context) {
|
|
32
|
+
throw new Error('usePHCMSAdmin must be used within a PHCMSAdminProvider');
|
|
33
|
+
}
|
|
34
|
+
return context.client;
|
|
35
|
+
};
|
package/src/errors.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PHCMSError, ValidationError, ApiError } from '@ph-cms/client-sdk';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { usePHCMSAdmin } from '../context';
|
|
3
|
+
|
|
4
|
+
export const useDashboard = () => {
|
|
5
|
+
const client = usePHCMSAdmin();
|
|
6
|
+
return useQuery({
|
|
7
|
+
queryKey: ['dashboard', 'stats'],
|
|
8
|
+
queryFn: () => client.dashboard.getStats(),
|
|
9
|
+
});
|
|
10
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { usePHCMSAdmin } from '../context';
|
|
3
|
+
import { ListHierarchyQuery } from '@ph-cms/api-contract-admin';
|
|
4
|
+
|
|
5
|
+
export const hierarchyKeys = {
|
|
6
|
+
all: ['hierarchy'] as const,
|
|
7
|
+
lists: () => [...hierarchyKeys.all, 'list'] as const,
|
|
8
|
+
list: (params?: ListHierarchyQuery) => [...hierarchyKeys.lists(), params] as const,
|
|
9
|
+
items: () => [...hierarchyKeys.all, 'items'] as const,
|
|
10
|
+
itemList: (setUid: string) => [...hierarchyKeys.items(), setUid] as const,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const useHierarchyList = (params?: ListHierarchyQuery) => {
|
|
14
|
+
const client = usePHCMSAdmin();
|
|
15
|
+
return useQuery({
|
|
16
|
+
queryKey: hierarchyKeys.list(params),
|
|
17
|
+
queryFn: () => client.hierarchy.list(params),
|
|
18
|
+
staleTime: 1000 * 60 * 60, // 1 hour
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const useHierarchyItems = (setUid?: string, enabled = true) => {
|
|
23
|
+
const client = usePHCMSAdmin();
|
|
24
|
+
return useQuery({
|
|
25
|
+
queryKey: hierarchyKeys.itemList(setUid || ''),
|
|
26
|
+
queryFn: () => client.hierarchy.listItems(setUid || ''),
|
|
27
|
+
staleTime: 1000 * 60 * 60, // 1 hour
|
|
28
|
+
enabled: enabled && !!setUid,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { usePHCMSAdmin } from '../context';
|
|
3
|
+
import { ListPolicyQuery } from '@ph-cms/api-contract-admin';
|
|
4
|
+
|
|
5
|
+
export const policyKeys = {
|
|
6
|
+
all: ['policy'] as const,
|
|
7
|
+
lists: () => [...policyKeys.all, 'list'] as const,
|
|
8
|
+
list: (params?: ListPolicyQuery) => [...policyKeys.lists(), params] as const,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const usePolicyList = (params?: ListPolicyQuery) => {
|
|
12
|
+
const client = usePHCMSAdmin();
|
|
13
|
+
return useQuery({
|
|
14
|
+
queryKey: policyKeys.list(params),
|
|
15
|
+
queryFn: () => client.policy.list(params),
|
|
16
|
+
staleTime: 1000 * 60 * 60, // 1 hour
|
|
17
|
+
});
|
|
18
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { useQuery, useMutation } from '@tanstack/react-query';
|
|
2
|
+
import { usePHCMSAdmin } from '../context';
|
|
3
|
+
|
|
4
|
+
export const useDbTables = () => {
|
|
5
|
+
const sdk = usePHCMSAdmin();
|
|
6
|
+
return useQuery({
|
|
7
|
+
queryKey: ['db-tables'],
|
|
8
|
+
queryFn: () => sdk.system.getDbTables(),
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const useExecuteQuery = () => {
|
|
13
|
+
const sdk = usePHCMSAdmin();
|
|
14
|
+
return useMutation({
|
|
15
|
+
mutationFn: (sql: string) => sdk.system.executeQuery(sql),
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const useTableData = (tableName: string, page: number = 1, limit: number = 20) => {
|
|
20
|
+
const sdk = usePHCMSAdmin();
|
|
21
|
+
return useQuery({
|
|
22
|
+
queryKey: ['table-data', tableName, page, limit],
|
|
23
|
+
queryFn: () => sdk.system.getTableData(tableName, page, limit),
|
|
24
|
+
enabled: !!tableName,
|
|
25
|
+
});
|
|
26
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useQuery } from '@tanstack/react-query';
|
|
2
|
+
import { usePHCMSAdmin } from '../context';
|
|
3
|
+
import { ListTermsQuery } from '@ph-cms/api-contract';
|
|
4
|
+
|
|
5
|
+
export const termsKeys = {
|
|
6
|
+
all: ['terms'] as const,
|
|
7
|
+
lists: () => [...termsKeys.all, 'list'] as const,
|
|
8
|
+
list: (params?: ListTermsQuery) => [...termsKeys.lists(), params] as const,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const useTermsList = (params?: ListTermsQuery) => {
|
|
12
|
+
const client = usePHCMSAdmin();
|
|
13
|
+
return useQuery({
|
|
14
|
+
queryKey: termsKeys.list(params),
|
|
15
|
+
queryFn: () => client.terms.list(params),
|
|
16
|
+
staleTime: 1000 * 60 * 60, // 1 hour
|
|
17
|
+
});
|
|
18
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { keepPreviousData, useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { usePHCMSAdmin } from '../context';
|
|
3
|
+
import { CreateUserRequest, ListUserQuery, UpdateUserRequest } from '@ph-cms/api-contract-admin';
|
|
4
|
+
|
|
5
|
+
export const userKeys = {
|
|
6
|
+
all: ['users'] as const,
|
|
7
|
+
lists: () => [...userKeys.all, 'list'] as const,
|
|
8
|
+
list: (params: ListUserQuery) => [...userKeys.lists(), params] as const,
|
|
9
|
+
details: () => [...userKeys.all, 'detail'] as const,
|
|
10
|
+
detail: (uid: string) => [...userKeys.details(), uid] as const,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const useUserList = (params: ListUserQuery) => {
|
|
14
|
+
const client = usePHCMSAdmin();
|
|
15
|
+
return useQuery({
|
|
16
|
+
queryKey: userKeys.list(params),
|
|
17
|
+
queryFn: () => client.user.list(params),
|
|
18
|
+
staleTime: 1000 * 60, // 1 minute
|
|
19
|
+
placeholderData: keepPreviousData,
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const useUserDetail = (uid: string) => {
|
|
24
|
+
const client = usePHCMSAdmin();
|
|
25
|
+
return useQuery({
|
|
26
|
+
queryKey: userKeys.detail(uid),
|
|
27
|
+
queryFn: () => client.user.get(uid),
|
|
28
|
+
enabled: !!uid,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const useUpdateUser = () => {
|
|
33
|
+
const client = usePHCMSAdmin();
|
|
34
|
+
const queryClient = useQueryClient();
|
|
35
|
+
|
|
36
|
+
return useMutation({
|
|
37
|
+
mutationFn: ({ uid, data }: { uid: string; data: UpdateUserRequest }) =>
|
|
38
|
+
client.user.update(uid, data),
|
|
39
|
+
onSuccess: (data, variables) => {
|
|
40
|
+
queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.uid) });
|
|
41
|
+
queryClient.invalidateQueries({ queryKey: userKeys.lists() });
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const useCreateUser = () => {
|
|
47
|
+
const client = usePHCMSAdmin();
|
|
48
|
+
const queryClient = useQueryClient();
|
|
49
|
+
|
|
50
|
+
return useMutation({
|
|
51
|
+
mutationFn: (data: CreateUserRequest) => client.user.create(data),
|
|
52
|
+
onSuccess: (data) => {
|
|
53
|
+
queryClient.invalidateQueries({ queryKey: userKeys.lists() });
|
|
54
|
+
queryClient.invalidateQueries({ queryKey: userKeys.detail(data.uid) });
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const useDeleteUser = () => {
|
|
60
|
+
const client = usePHCMSAdmin();
|
|
61
|
+
const queryClient = useQueryClient();
|
|
62
|
+
|
|
63
|
+
return useMutation({
|
|
64
|
+
mutationFn: (uid: string) => client.user.delete(uid),
|
|
65
|
+
onSuccess: () => {
|
|
66
|
+
queryClient.invalidateQueries({ queryKey: userKeys.lists() });
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
};
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { PHCMSAdminClient } from './client';
|
|
2
|
+
export { PHCMSAdminProvider, usePHCMSAdmin } from './context';
|
|
3
|
+
export * from './errors';
|
|
4
|
+
|
|
5
|
+
export * from './modules/system';
|
|
6
|
+
export * from './modules/dashboard';
|
|
7
|
+
export * from './modules/user';
|
|
8
|
+
export * from './modules/policy';
|
|
9
|
+
export * from './modules/hierarchy';
|
|
10
|
+
export * from './modules/terms';
|
|
11
|
+
|
|
12
|
+
export * from './hooks/useSystem';
|
|
13
|
+
export * from './hooks/useDashboard';
|
|
14
|
+
export * from './hooks/useUser';
|
|
15
|
+
export * from './hooks/usePolicy';
|
|
16
|
+
export * from './hooks/useHierarchy';
|
|
17
|
+
export * from './hooks/useTerms';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { DashboardDto } from "@ph-cms/api-contract-admin";
|
|
3
|
+
|
|
4
|
+
export class DashboardModule {
|
|
5
|
+
constructor(private client: AxiosInstance) {}
|
|
6
|
+
|
|
7
|
+
async getStats(): Promise<DashboardDto> {
|
|
8
|
+
return this.client.get<any, DashboardDto>('/api/dashboard') as Promise<DashboardDto>;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { HierarchySetDto, CreateHierarchySetRequest, UpdateHierarchySetRequest, HierarchyItemDto, AddHierarchyItemRequest, ListHierarchyQuery, PagedHierarchySetListResponse } from "@ph-cms/api-contract-admin";
|
|
3
|
+
|
|
4
|
+
export class HierarchyModule {
|
|
5
|
+
constructor(private client: AxiosInstance) {}
|
|
6
|
+
|
|
7
|
+
async list(params?: ListHierarchyQuery): Promise<PagedHierarchySetListResponse> {
|
|
8
|
+
return this.client.get<any, PagedHierarchySetListResponse>('/api/hierarchy', { params }) as Promise<PagedHierarchySetListResponse>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async get(uid: string): Promise<HierarchySetDto> {
|
|
12
|
+
return this.client.get<any, HierarchySetDto>(`/api/hierarchy/${uid}`) as Promise<HierarchySetDto>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async create(data: CreateHierarchySetRequest): Promise<HierarchySetDto> {
|
|
16
|
+
return this.client.post<any, HierarchySetDto>('/api/hierarchy', data) as Promise<HierarchySetDto>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async update(uid: string, data: UpdateHierarchySetRequest): Promise<HierarchySetDto> {
|
|
20
|
+
return this.client.put<any, HierarchySetDto>(`/api/hierarchy/${uid}`, data) as Promise<HierarchySetDto>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async delete(uid: string): Promise<void> {
|
|
24
|
+
return this.client.delete(`/api/hierarchy/${uid}`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async listItems(setUid: string): Promise<HierarchyItemDto[]> {
|
|
28
|
+
return this.client.get<any, HierarchyItemDto[]>(`/api/hierarchy/${setUid}/items`) as Promise<HierarchyItemDto[]>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async addItem(setUid: string, data: AddHierarchyItemRequest): Promise<HierarchyItemDto> {
|
|
32
|
+
return this.client.post<any, HierarchyItemDto>(`/api/hierarchy/${setUid}/items`, data) as Promise<HierarchyItemDto>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async removeItem(setUid: string, itemUid: string): Promise<void> {
|
|
36
|
+
return this.client.delete(`/api/hierarchy/${setUid}/items/${itemUid}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { PermissionPolicySetDto, CreatePermissionPolicySetRequest, UpdatePermissionPolicySetRequest, ListPolicyQuery, PagedPermissionPolicySetListResponse } from "@ph-cms/api-contract-admin";
|
|
3
|
+
|
|
4
|
+
export class PolicyModule {
|
|
5
|
+
constructor(private client: AxiosInstance) {}
|
|
6
|
+
|
|
7
|
+
async list(params?: ListPolicyQuery): Promise<PagedPermissionPolicySetListResponse> {
|
|
8
|
+
return this.client.get<any, PagedPermissionPolicySetListResponse>('/api/policies', { params }) as Promise<PagedPermissionPolicySetListResponse>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async get(uid: string): Promise<PermissionPolicySetDto> {
|
|
12
|
+
return this.client.get<any, PermissionPolicySetDto>(`/api/policies/${uid}`) as Promise<PermissionPolicySetDto>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async create(data: CreatePermissionPolicySetRequest): Promise<PermissionPolicySetDto> {
|
|
16
|
+
return this.client.post<any, PermissionPolicySetDto>('/api/policies', data) as Promise<PermissionPolicySetDto>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async update(uid: string, data: UpdatePermissionPolicySetRequest): Promise<PermissionPolicySetDto> {
|
|
20
|
+
return this.client.put<any, PermissionPolicySetDto>(`/api/policies/${uid}`, data) as Promise<PermissionPolicySetDto>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async delete(uid: string): Promise<void> {
|
|
24
|
+
return this.client.delete(`/api/policies/${uid}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DbTablesResponseSchema, ExecuteQueryRequestSchema, ExecuteQueryResponseSchema, GetTableDataResponseSchema } from "@ph-cms/api-contract-admin";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
|
|
4
|
+
export class SystemModule {
|
|
5
|
+
constructor(private client: any) {}
|
|
6
|
+
|
|
7
|
+
async getDbTables() {
|
|
8
|
+
const response = await this.client.get("/api/system/db/tables");
|
|
9
|
+
return DbTablesResponseSchema.parse(response);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async executeQuery(sql: string) {
|
|
13
|
+
const response = await this.client.post("/api/system/db/query", { sql });
|
|
14
|
+
return ExecuteQueryResponseSchema.parse(response);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async getTableData(tableName: string, page: number = 1, limit: number = 20) {
|
|
18
|
+
const response = await this.client.get(`/api/system/db-data/${tableName}`, {
|
|
19
|
+
params: { page, limit }
|
|
20
|
+
});
|
|
21
|
+
return GetTableDataResponseSchema.parse(response);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { TermDto, ListTermsQuery, PagedTermListResponse } from "@ph-cms/api-contract";
|
|
3
|
+
import { CreateTermRequest } from "@ph-cms/api-contract-admin";
|
|
4
|
+
|
|
5
|
+
export class TermsModule {
|
|
6
|
+
constructor(private client: AxiosInstance) {}
|
|
7
|
+
|
|
8
|
+
async list(params?: ListTermsQuery): Promise<PagedTermListResponse> {
|
|
9
|
+
return this.client.get<any, PagedTermListResponse>('/api/terms', { params }) as Promise<PagedTermListResponse>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async get(id: number): Promise<TermDto> {
|
|
13
|
+
return this.client.get<any, TermDto>(`/api/terms/${id}`) as Promise<TermDto>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async create(data: CreateTermRequest): Promise<TermDto> {
|
|
17
|
+
return this.client.post<any, TermDto>('/api/terms', data) as Promise<TermDto>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async disable(id: number): Promise<void> {
|
|
21
|
+
return this.client.delete(`/api/terms/${id}`);
|
|
22
|
+
}
|
|
23
|
+
}
|