@powerhousedao/codegen 4.1.0-dev.19 → 4.1.0-dev.20

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/codegen",
3
- "version": "4.1.0-dev.19",
3
+ "version": "4.1.0-dev.20",
4
4
  "license": "AGPL-3.0-only",
5
5
  "private": false,
6
6
  "type": "module",
@@ -34,8 +34,8 @@
34
34
  "kysely-pglite": "^0.6.1",
35
35
  "prettier": "^3.4.2",
36
36
  "ts-morph": "^26.0.0",
37
- "@powerhousedao/config": "4.1.0-dev.19",
38
- "document-model": "4.1.0-dev.19"
37
+ "document-model": "4.1.0-dev.20",
38
+ "@powerhousedao/config": "4.1.0-dev.20"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@graphql-codegen/core": "^4.0.2",
@@ -45,8 +45,8 @@
45
45
  "husky": "^8.0.3",
46
46
  "vitest": "^3.1.2",
47
47
  "zod": "^3.24.3",
48
- "@powerhousedao/reactor-api": "4.1.0-dev.19",
49
- "document-drive": "4.1.0-dev.19"
48
+ "@powerhousedao/reactor-api": "4.1.0-dev.20",
49
+ "document-drive": "4.1.0-dev.20"
50
50
  },
51
51
  "scripts": {
52
52
  "build:tsc": "tsc --build",
@@ -1,44 +0,0 @@
1
- ---
2
- to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/components/FileItemsGrid.tsx"
3
- unless_exists: true
4
- ---
5
- import { FileItem, type UiFileNode, type BaseUiFileNode } from "@powerhousedao/design-system";
6
-
7
- interface FileItemsGridProps {
8
- files: UiFileNode[];
9
- onSelectNode: (node: BaseUiFileNode) => void;
10
- onRenameNode: (nodeId: string, name: string) => void;
11
- onDuplicateNode: (node: BaseUiFileNode) => void;
12
- onDeleteNode: (nodeId: string) => void;
13
- isAllowedToCreateDocuments: boolean;
14
- }
15
-
16
- export function FileItemsGrid({
17
- files,
18
- onSelectNode,
19
- onRenameNode,
20
- onDuplicateNode,
21
- onDeleteNode,
22
- isAllowedToCreateDocuments,
23
- }: FileItemsGridProps) {
24
- if (files.length === 0) return null;
25
-
26
- return (
27
- <div>
28
- <h3 className="text-sm font-medium text-gray-500 mb-2">Files</h3>
29
- <div className="flex flex-wrap gap-2">
30
- {files.map((file) => (
31
- <FileItem
32
- key={file.id}
33
- uiNode={file}
34
- onSelectNode={onSelectNode}
35
- onRenameNode={(name) => onRenameNode(file.id, name)}
36
- onDuplicateNode={onDuplicateNode}
37
- onDeleteNode={() => onDeleteNode(file.id)}
38
- isAllowedToCreateDocuments={isAllowedToCreateDocuments}
39
- />
40
- ))}
41
- </div>
42
- </div>
43
- );
44
- }
@@ -1,96 +0,0 @@
1
- ---
2
- to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/components/FolderItemsGrid.tsx"
3
- unless_exists: true
4
- ---
5
- import {
6
- FolderItem,
7
- type UiFolderNode,
8
- type UiNode,
9
- type BaseUiFolderNode,
10
- type BaseUiNode,
11
- } from "@powerhousedao/design-system";
12
- import { useState } from "react";
13
-
14
- interface FolderItemsGridProps {
15
- folders: UiFolderNode[];
16
- onSelectNode: (node: BaseUiFolderNode) => void;
17
- onRenameNode: (nodeId: string, name: string) => void;
18
- onDuplicateNode: (node: BaseUiFolderNode) => void;
19
- onDeleteNode: (nodeId: string) => void;
20
- onAddFile: (file: File, parentNode: BaseUiNode | null) => Promise<void>;
21
- onCopyNode: (uiNode: BaseUiNode, targetNode: BaseUiNode) => Promise<void>;
22
- onMoveNode: (uiNode: BaseUiNode, targetNode: BaseUiNode) => Promise<void>;
23
- isAllowedToCreateDocuments: boolean;
24
- onAddFolder: (name: string, parentFolder?: string) => void;
25
- parentFolderId?: string;
26
- }
27
-
28
- export function FolderItemsGrid({
29
- folders,
30
- onSelectNode,
31
- onRenameNode,
32
- onDuplicateNode,
33
- onDeleteNode,
34
- onAddFile,
35
- onCopyNode,
36
- onMoveNode,
37
- isAllowedToCreateDocuments,
38
- onAddFolder,
39
- parentFolderId,
40
- }: FolderItemsGridProps) {
41
- const [newFolderName, setNewFolderName] = useState("");
42
-
43
- const handleSubmit = (e: React.FormEvent) => {
44
- e.preventDefault();
45
- if (newFolderName.trim()) {
46
- onAddFolder(newFolderName.trim(), parentFolderId);
47
- setNewFolderName("");
48
- }
49
- };
50
-
51
- return (
52
- <div className="mb-6">
53
- <div className="flex items-center gap-4 mb-2">
54
- <h3 className="text-sm font-medium text-gray-500">Folders</h3>
55
-
56
- {/* New Folder Input */}
57
- <form onSubmit={handleSubmit} className="w-48">
58
- <div className="relative">
59
- <input
60
- type="text"
61
- value={newFolderName}
62
- onChange={(e) => setNewFolderName(e.target.value)}
63
- placeholder="Create new folder..."
64
- className="w-full px-3 py-1.5 pr-8 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
65
- />
66
- <button
67
- type="submit"
68
- className="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 focus:outline-none text-sm"
69
- >
70
- +
71
- </button>
72
- </div>
73
- </form>
74
- </div>
75
-
76
- {folders.length > 0 && (
77
- <div className="flex flex-wrap gap-2">
78
- {folders.map((folder) => (
79
- <FolderItem
80
- key={folder.id}
81
- uiNode={folder}
82
- onSelectNode={onSelectNode}
83
- onRenameNode={(name) => onRenameNode(folder.id, name)}
84
- onDuplicateNode={onDuplicateNode}
85
- onDeleteNode={() => onDeleteNode(folder.id)}
86
- onAddFile={onAddFile}
87
- onCopyNode={onCopyNode}
88
- onMoveNode={onMoveNode}
89
- isAllowedToCreateDocuments={isAllowedToCreateDocuments}
90
- />
91
- ))}
92
- </div>
93
- )}
94
- </div>
95
- );
96
- }
@@ -1,35 +0,0 @@
1
- ---
2
- to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/hooks/useSelectedFolderChildren.ts"
3
- unless_exists: true
4
- ---
5
- import { useMemo } from 'react';
6
- import type { UiFileNode, UiFolderNode } from '@powerhousedao/design-system';
7
-
8
- interface SelectedFolderChildren {
9
- folders: UiFolderNode[];
10
- files: UiFileNode[];
11
- }
12
-
13
- export function useSelectedFolderChildren(
14
- selectedNodeId: string | undefined,
15
- folders: UiFolderNode[],
16
- files: UiFileNode[]
17
- ): SelectedFolderChildren {
18
- return useMemo(() => {
19
- if (!selectedNodeId) {
20
- // Show root-level items when no folder is selected
21
- return {
22
- folders: folders.filter(f => !f.parentFolder),
23
- files: files.filter(f => !f.parentFolder)
24
- };
25
- }
26
-
27
- const selectedFolder = folders.find(f => f.id === selectedNodeId);
28
- if (!selectedFolder) return { folders: [], files: [] };
29
-
30
- return {
31
- folders: folders.filter(f => f.parentFolder === selectedFolder.id),
32
- files: files.filter(f => f.parentFolder === selectedFolder.id)
33
- };
34
- }, [selectedNodeId, folders, files]);
35
- }
@@ -1,35 +0,0 @@
1
- ---
2
- to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/hooks/useTransformedNodes.ts"
3
- unless_exists: true
4
- ---
5
- import { useMemo } from 'react';
6
- import type { Node, FileNode } from 'document-drive';
7
- import type { UiFileNode, UiFolderNode } from '@powerhousedao/design-system';
8
-
9
- export function useTransformedNodes(nodes: Node[], driveId: string) {
10
- return useMemo(() => {
11
- return nodes.map(node => {
12
- const isFolder = 'kind' in node && node.kind === 'folder';
13
-
14
- if (isFolder) {
15
- return {
16
- id: node.id,
17
- name: node.name,
18
- kind: 'FOLDER' as const,
19
- parentFolder: node.parentFolder || '',
20
- driveId,
21
- children: nodes.filter(n => n.parentFolder === node.id).map(n => n.id)
22
- };
23
- } else {
24
- return {
25
- id: node.id,
26
- name: node.name,
27
- kind: 'FILE' as const,
28
- parentFolder: node.parentFolder || '',
29
- driveId,
30
- documentType: (node as FileNode).documentType
31
- };
32
- }
33
- }).filter(Boolean) as (UiFileNode | UiFolderNode)[];
34
- }, [nodes, driveId]);
35
- }