@tulip-systems/drive 0.8.0 → 0.8.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/dist/client.d.mts +5 -0
- package/dist/client.mjs +6 -0
- package/dist/components/content.d.mts +14 -0
- package/dist/components/content.d.mts.map +1 -0
- package/dist/components/content.mjs +18 -0
- package/dist/components/content.mjs.map +1 -0
- package/dist/components/context.client.d.mts +14 -0
- package/dist/components/context.client.d.mts.map +1 -0
- package/dist/components/dnd.client.d.mts +17 -0
- package/dist/components/dnd.client.d.mts.map +1 -0
- package/dist/components/dnd.client.mjs +30 -0
- package/dist/components/dnd.client.mjs.map +1 -0
- package/dist/components/grid-card.client.d.mts +43 -0
- package/dist/components/grid-card.client.d.mts.map +1 -0
- package/dist/components/grid-card.client.mjs +173 -0
- package/dist/components/grid-card.client.mjs.map +1 -0
- package/dist/components/grid.client.d.mts +54 -0
- package/dist/components/grid.client.d.mts.map +1 -0
- package/dist/components/grid.client.mjs +54 -0
- package/dist/components/grid.client.mjs.map +1 -0
- package/dist/components/navigation/breadcrumbs.client.d.mts +26 -0
- package/dist/components/navigation/breadcrumbs.client.d.mts.map +1 -0
- package/dist/components/navigation/breadcrumbs.client.mjs +52 -0
- package/dist/components/navigation/breadcrumbs.client.mjs.map +1 -0
- package/dist/components/navigation/header.client.d.mts +28 -0
- package/dist/components/navigation/header.client.d.mts.map +1 -0
- package/dist/components/navigation/header.client.mjs +41 -0
- package/dist/components/navigation/header.client.mjs.map +1 -0
- package/dist/components/navigation/toolbar.client.d.mts +24 -0
- package/dist/components/navigation/toolbar.client.d.mts.map +1 -0
- package/dist/components/navigation/toolbar.client.mjs +35 -0
- package/dist/components/navigation/toolbar.client.mjs.map +1 -0
- package/dist/components/navigation/view-switcher.client.d.mts +10 -0
- package/dist/components/navigation/view-switcher.client.d.mts.map +1 -0
- package/dist/components/navigation/view-switcher.client.mjs +36 -0
- package/dist/components/navigation/view-switcher.client.mjs.map +1 -0
- package/dist/components/selection.client.d.mts +28 -0
- package/dist/components/selection.client.d.mts.map +1 -0
- package/dist/components/selection.client.mjs +39 -0
- package/dist/components/selection.client.mjs.map +1 -0
- package/dist/components/view.client.d.mts +26 -0
- package/dist/components/view.client.d.mts.map +1 -0
- package/dist/components/view.client.mjs +44 -0
- package/dist/components/view.client.mjs.map +1 -0
- package/dist/config/filters.mjs +15 -0
- package/dist/config/filters.mjs.map +1 -0
- package/dist/config/types.mjs +61 -0
- package/dist/config/types.mjs.map +1 -0
- package/dist/google/client.d.mts +8 -0
- package/dist/google/client.mjs +9 -0
- package/dist/google/server.d.mts +3 -0
- package/dist/google/server.mjs +4 -0
- package/dist/google.d.mts +6 -0
- package/dist/google.mjs +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +7 -0
- package/dist/lib/constants.d.mts +12 -0
- package/dist/lib/constants.d.mts.map +1 -0
- package/dist/lib/constants.mjs +21 -0
- package/dist/lib/constants.mjs.map +1 -0
- package/dist/lib/contracts.d.mts +101 -0
- package/dist/lib/contracts.d.mts.map +1 -0
- package/dist/lib/dto.d.mts +118 -0
- package/dist/lib/dto.d.mts.map +1 -0
- package/dist/lib/dto.mjs +58 -0
- package/dist/lib/dto.mjs.map +1 -0
- package/dist/lib/helpers.d.mts +18 -0
- package/dist/lib/helpers.d.mts.map +1 -0
- package/dist/lib/helpers.mjs +37 -0
- package/dist/lib/helpers.mjs.map +1 -0
- package/dist/lib/helpers.server.d.mts +14 -0
- package/dist/lib/helpers.server.d.mts.map +1 -0
- package/dist/lib/helpers.server.mjs +16 -0
- package/dist/lib/helpers.server.mjs.map +1 -0
- package/dist/lib/search-params.d.mts +9 -0
- package/dist/lib/search-params.d.mts.map +1 -0
- package/dist/lib/search-params.mjs +8 -0
- package/dist/lib/search-params.mjs.map +1 -0
- package/dist/lib/validators.d.mts +158 -0
- package/dist/lib/validators.d.mts.map +1 -0
- package/dist/lib/validators.mjs +66 -0
- package/dist/lib/validators.mjs.map +1 -0
- package/dist/local/client.d.mts +13 -0
- package/dist/local/client.mjs +13 -0
- package/dist/local/server.d.mts +4 -0
- package/dist/local/server.mjs +5 -0
- package/dist/local.d.mts +8 -0
- package/dist/local.mjs +9 -0
- package/dist/providers/google/components/command-file-update.d.mts +22 -0
- package/dist/providers/google/components/command-file-update.d.mts.map +1 -0
- package/dist/providers/google/components/command-file-update.mjs +52 -0
- package/dist/providers/google/components/command-file-update.mjs.map +1 -0
- package/dist/providers/google/components/command-folder-create.d.mts +22 -0
- package/dist/providers/google/components/command-folder-create.d.mts.map +1 -0
- package/dist/providers/google/components/command-folder-create.mjs +59 -0
- package/dist/providers/google/components/command-folder-create.mjs.map +1 -0
- package/dist/providers/google/components/command-folder-update.d.mts +22 -0
- package/dist/providers/google/components/command-folder-update.d.mts.map +1 -0
- package/dist/providers/google/components/command-folder-update.mjs +52 -0
- package/dist/providers/google/components/command-folder-update.mjs.map +1 -0
- package/dist/providers/google/components/content.client.d.mts +10 -0
- package/dist/providers/google/components/content.client.d.mts.map +1 -0
- package/dist/providers/google/components/content.client.mjs +11 -0
- package/dist/providers/google/components/content.client.mjs.map +1 -0
- package/dist/providers/google/components/navigation.client.d.mts +16 -0
- package/dist/providers/google/components/navigation.client.d.mts.map +1 -0
- package/dist/providers/google/components/navigation.client.mjs +18 -0
- package/dist/providers/google/components/navigation.client.mjs.map +1 -0
- package/dist/providers/google/components/provider.client.d.mts +33 -0
- package/dist/providers/google/components/provider.client.d.mts.map +1 -0
- package/dist/providers/google/components/provider.client.mjs +43 -0
- package/dist/providers/google/components/provider.client.mjs.map +1 -0
- package/dist/providers/google/components/view.client.d.mts +41 -0
- package/dist/providers/google/components/view.client.d.mts.map +1 -0
- package/dist/providers/google/components/view.client.mjs +98 -0
- package/dist/providers/google/components/view.client.mjs.map +1 -0
- package/dist/providers/google/config/columns-data.d.mts +8 -0
- package/dist/providers/google/config/columns-data.d.mts.map +1 -0
- package/dist/providers/google/config/columns-data.mjs +70 -0
- package/dist/providers/google/config/columns-data.mjs.map +1 -0
- package/dist/providers/google/config/filters.d.mts +16 -0
- package/dist/providers/google/config/filters.d.mts.map +1 -0
- package/dist/providers/google/config/filters.mjs +8 -0
- package/dist/providers/google/config/filters.mjs.map +1 -0
- package/dist/providers/google/lib/constants.mjs +13 -0
- package/dist/providers/google/lib/constants.mjs.map +1 -0
- package/dist/providers/google/lib/dto.d.mts +39 -0
- package/dist/providers/google/lib/dto.d.mts.map +1 -0
- package/dist/providers/google/lib/dto.mjs +66 -0
- package/dist/providers/google/lib/dto.mjs.map +1 -0
- package/dist/providers/google/lib/helpers.mjs +46 -0
- package/dist/providers/google/lib/helpers.mjs.map +1 -0
- package/dist/providers/google/lib/router.server.d.mts +612 -0
- package/dist/providers/google/lib/router.server.d.mts.map +1 -0
- package/dist/providers/google/lib/router.server.mjs +40 -0
- package/dist/providers/google/lib/router.server.mjs.map +1 -0
- package/dist/providers/google/lib/search-params.d.mts +15 -0
- package/dist/providers/google/lib/search-params.d.mts.map +1 -0
- package/dist/providers/google/lib/search-params.mjs +12 -0
- package/dist/providers/google/lib/search-params.mjs.map +1 -0
- package/dist/providers/google/lib/service.server.d.mts +186 -0
- package/dist/providers/google/lib/service.server.d.mts.map +1 -0
- package/dist/providers/google/lib/service.server.mjs +613 -0
- package/dist/providers/google/lib/service.server.mjs.map +1 -0
- package/dist/providers/google/lib/validators.d.mts +303 -0
- package/dist/providers/google/lib/validators.d.mts.map +1 -0
- package/dist/providers/google/lib/validators.mjs +59 -0
- package/dist/providers/google/lib/validators.mjs.map +1 -0
- package/dist/providers/local/components/command-file-update.d.mts +18 -0
- package/dist/providers/local/components/command-file-update.d.mts.map +1 -0
- package/dist/providers/local/components/command-file-update.mjs +48 -0
- package/dist/providers/local/components/command-file-update.mjs.map +1 -0
- package/dist/providers/local/components/command-file-upload.d.mts +11 -0
- package/dist/providers/local/components/command-file-upload.d.mts.map +1 -0
- package/dist/providers/local/components/command-file-upload.mjs +35 -0
- package/dist/providers/local/components/command-file-upload.mjs.map +1 -0
- package/dist/providers/local/components/command-folder-create.d.mts +18 -0
- package/dist/providers/local/components/command-folder-create.d.mts.map +1 -0
- package/dist/providers/local/components/command-folder-create.mjs +55 -0
- package/dist/providers/local/components/command-folder-create.mjs.map +1 -0
- package/dist/providers/local/components/command-folder-update.d.mts +18 -0
- package/dist/providers/local/components/command-folder-update.d.mts.map +1 -0
- package/dist/providers/local/components/command-folder-update.mjs +48 -0
- package/dist/providers/local/components/command-folder-update.mjs.map +1 -0
- package/dist/providers/local/components/content.client.d.mts +7 -0
- package/dist/providers/local/components/content.client.d.mts.map +1 -0
- package/dist/providers/local/components/content.client.mjs +8 -0
- package/dist/providers/local/components/content.client.mjs.map +1 -0
- package/dist/providers/local/components/navigation.client.d.mts +16 -0
- package/dist/providers/local/components/navigation.client.d.mts.map +1 -0
- package/dist/providers/local/components/navigation.client.mjs +18 -0
- package/dist/providers/local/components/navigation.client.mjs.map +1 -0
- package/dist/providers/local/components/provider.client.d.mts +40 -0
- package/dist/providers/local/components/provider.client.d.mts.map +1 -0
- package/dist/providers/local/components/provider.client.mjs +61 -0
- package/dist/providers/local/components/provider.client.mjs.map +1 -0
- package/dist/providers/local/components/upload-zone-context.client.d.mts +38 -0
- package/dist/providers/local/components/upload-zone-context.client.d.mts.map +1 -0
- package/dist/providers/local/components/upload-zone-context.client.mjs +23 -0
- package/dist/providers/local/components/upload-zone-context.client.mjs.map +1 -0
- package/dist/providers/local/components/upload-zone.client.d.mts +30 -0
- package/dist/providers/local/components/upload-zone.client.d.mts.map +1 -0
- package/dist/providers/local/components/upload-zone.client.mjs +147 -0
- package/dist/providers/local/components/upload-zone.client.mjs.map +1 -0
- package/dist/providers/local/components/view.client.d.mts +32 -0
- package/dist/providers/local/components/view.client.d.mts.map +1 -0
- package/dist/providers/local/components/view.client.mjs +91 -0
- package/dist/providers/local/components/view.client.mjs.map +1 -0
- package/dist/providers/local/config/columns-data.d.mts +8 -0
- package/dist/providers/local/config/columns-data.d.mts.map +1 -0
- package/dist/providers/local/config/columns-data.mjs +70 -0
- package/dist/providers/local/config/columns-data.mjs.map +1 -0
- package/dist/providers/local/config/filters.d.mts +26 -0
- package/dist/providers/local/config/filters.d.mts.map +1 -0
- package/dist/providers/local/config/filters.mjs +15 -0
- package/dist/providers/local/config/filters.mjs.map +1 -0
- package/dist/providers/local/lib/constants.d.mts +12 -0
- package/dist/providers/local/lib/constants.d.mts.map +1 -0
- package/dist/providers/local/lib/constants.mjs +29 -0
- package/dist/providers/local/lib/constants.mjs.map +1 -0
- package/dist/providers/local/lib/helpers.d.mts +45 -0
- package/dist/providers/local/lib/helpers.d.mts.map +1 -0
- package/dist/providers/local/lib/helpers.mjs +110 -0
- package/dist/providers/local/lib/helpers.mjs.map +1 -0
- package/dist/providers/local/lib/route-handler.server.d.mts +34 -0
- package/dist/providers/local/lib/route-handler.server.d.mts.map +1 -0
- package/dist/providers/local/lib/route-handler.server.mjs +114 -0
- package/dist/providers/local/lib/route-handler.server.mjs.map +1 -0
- package/dist/providers/local/lib/router.server.d.mts +41648 -0
- package/dist/providers/local/lib/router.server.d.mts.map +1 -0
- package/dist/providers/local/lib/router.server.mjs +52 -0
- package/dist/providers/local/lib/router.server.mjs.map +1 -0
- package/dist/providers/local/lib/schema.d.mts +1113 -0
- package/dist/providers/local/lib/schema.d.mts.map +1 -0
- package/dist/providers/local/lib/schema.mjs +71 -0
- package/dist/providers/local/lib/schema.mjs.map +1 -0
- package/dist/providers/local/lib/search-params.d.mts +14 -0
- package/dist/providers/local/lib/search-params.d.mts.map +1 -0
- package/dist/providers/local/lib/search-params.mjs +9 -0
- package/dist/providers/local/lib/search-params.mjs.map +1 -0
- package/dist/providers/local/lib/service.server.d.mts +489 -0
- package/dist/providers/local/lib/service.server.d.mts.map +1 -0
- package/dist/providers/local/lib/service.server.mjs +668 -0
- package/dist/providers/local/lib/service.server.mjs.map +1 -0
- package/dist/providers/local/lib/upload.client.d.mts +62 -0
- package/dist/providers/local/lib/upload.client.d.mts.map +1 -0
- package/dist/providers/local/lib/upload.client.mjs +100 -0
- package/dist/providers/local/lib/upload.client.mjs.map +1 -0
- package/dist/providers/local/lib/validators.d.mts +454 -0
- package/dist/providers/local/lib/validators.d.mts.map +1 -0
- package/dist/providers/local/lib/validators.mjs +96 -0
- package/dist/providers/local/lib/validators.mjs.map +1 -0
- package/dist/server.d.mts +2 -0
- package/dist/server.mjs +3 -0
- package/package.json +3 -2
- package/src/components/grid-card.client.tsx +4 -1
- package/src/providers/google/components/view.client.tsx +9 -1
- package/src/providers/google/lib/helpers.ts +9 -0
- package/src/providers/local/components/provider.client.tsx +2 -1
- package/src/providers/local/components/upload-zone-context.client.tsx +1 -0
- package/src/providers/local/components/upload-zone.client.tsx +14 -1
- package/src/providers/local/components/view.client.tsx +10 -2
- package/src/providers/local/lib/helpers.ts +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { LocalDriveNodeWithAsset } from "../lib/validators.mjs";
|
|
2
|
+
import { TableColumnDef } from "@tulip-systems/core/data-tables";
|
|
3
|
+
import { ComponentProps } from "react";
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
|
+
import { useInfiniteStrategy } from "@tulip-systems/core/data-tables/client";
|
|
6
|
+
import { CommandDef } from "@tulip-systems/core/commands";
|
|
7
|
+
import { VisibilityState } from "@tanstack/react-table";
|
|
8
|
+
|
|
9
|
+
//#region src/providers/local/components/view.client.d.ts
|
|
10
|
+
type LocalDriveViewProviderProps<TData extends LocalDriveNodeWithAsset = LocalDriveNodeWithAsset> = ComponentProps<"div"> & {
|
|
11
|
+
queryData: TData[];
|
|
12
|
+
columns?: TableColumnDef<TData>[];
|
|
13
|
+
strategy: ReturnType<typeof useInfiniteStrategy>;
|
|
14
|
+
commands?: CommandDef<TData>[];
|
|
15
|
+
columnVisibility?: VisibilityState;
|
|
16
|
+
};
|
|
17
|
+
declare function LocalDriveViewProvider<TData extends LocalDriveNodeWithAsset = LocalDriveNodeWithAsset>({
|
|
18
|
+
queryData,
|
|
19
|
+
columns,
|
|
20
|
+
strategy,
|
|
21
|
+
commands,
|
|
22
|
+
columnVisibility,
|
|
23
|
+
children,
|
|
24
|
+
...props
|
|
25
|
+
}: LocalDriveViewProviderProps<TData>): react_jsx_runtime0.JSX.Element;
|
|
26
|
+
declare function LocalDriveView(): react_jsx_runtime0.JSX.Element | null;
|
|
27
|
+
declare function LocalDriveViewLoading({
|
|
28
|
+
...props
|
|
29
|
+
}: ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { LocalDriveView, LocalDriveViewLoading, LocalDriveViewProvider };
|
|
32
|
+
//# sourceMappingURL=view.client.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.client.d.mts","names":[],"sources":["../../../../src/providers/local/components/view.client.tsx"],"mappings":";;;;;;;;;KA8BK,2BAAA,eAA0C,uBAAA,GAA0B,uBAAA,IACvE,cAAA;EACE,SAAA,EAAW,KAAA;EACX,OAAA,GAAU,cAAA,CAAe,KAAA;EACzB,QAAA,EAAU,UAAA,QAAkB,mBAAA;EAC5B,QAAA,GAAW,UAAA,CAAW,KAAA;EACtB,gBAAA,GAAmB,eAAA;AAAA;AAAA,iBAGP,sBAAA,eACA,uBAAA,GAA0B,uBAAA,CAAA,CAAA;EAExC,SAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA;EACA,gBAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,2BAAA,CAA4B,KAAA,IAAM,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAqBrB,cAAA,CAAA,GAAc,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAyEd,qBAAA,CAAA;EAAA,GAA2B;AAAA,GAAS,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useDriveSelectionContext } from "../../../components/selection.client.mjs";
|
|
4
|
+
import { DriveGridCard, DriveGridCardSkeleton } from "../../../components/grid-card.client.mjs";
|
|
5
|
+
import { DriveGrid, DriveGridBottombar, DriveGridEmpty, DriveGridLoading } from "../../../components/grid.client.mjs";
|
|
6
|
+
import { useDriveViewContext } from "../../../components/view.client.mjs";
|
|
7
|
+
import { localDriveColumns } from "../config/columns-data.mjs";
|
|
8
|
+
import { localDriveImageLoader } from "../lib/helpers.mjs";
|
|
9
|
+
import { useLocalDriveUploadZone } from "./upload-zone-context.client.mjs";
|
|
10
|
+
import { useLocalDriveContext } from "./provider.client.mjs";
|
|
11
|
+
import { TableLayout, TableSkeleton } from "@tulip-systems/core/data-tables";
|
|
12
|
+
import { useMemo } from "react";
|
|
13
|
+
import { FloatingCommandMenu } from "@tulip-systems/core/commands/client";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
import { DataTable, TableConfigProvider, createTableConfig, useTableConfigContext } from "@tulip-systems/core/data-tables/client";
|
|
16
|
+
|
|
17
|
+
//#region src/providers/local/components/view.client.tsx
|
|
18
|
+
function LocalDriveViewProvider({ queryData, columns = localDriveColumns, strategy, commands, columnVisibility, children, ...props }) {
|
|
19
|
+
const { meta } = useLocalDriveContext();
|
|
20
|
+
const { selection } = useDriveSelectionContext();
|
|
21
|
+
return /* @__PURE__ */ jsx(TableConfigProvider, {
|
|
22
|
+
config: createTableConfig({
|
|
23
|
+
queryData,
|
|
24
|
+
columns,
|
|
25
|
+
strategy,
|
|
26
|
+
commands,
|
|
27
|
+
meta,
|
|
28
|
+
columnVisibility,
|
|
29
|
+
selection
|
|
30
|
+
}),
|
|
31
|
+
children: /* @__PURE__ */ jsx(TableLayout, {
|
|
32
|
+
...props,
|
|
33
|
+
children
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function LocalDriveView() {
|
|
38
|
+
const { view } = useDriveViewContext();
|
|
39
|
+
if (view === "grid") return /* @__PURE__ */ jsx(LocalDriveGrid, {});
|
|
40
|
+
if (view === "list") return /* @__PURE__ */ jsx(LocalDriveList, {});
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
function LocalDriveGrid(props) {
|
|
44
|
+
const { queryData, strategy, commands, selection, meta } = useTableConfigContext();
|
|
45
|
+
const { optimistic } = useLocalDriveUploadZone();
|
|
46
|
+
const { rowCount, paginationState } = strategy;
|
|
47
|
+
const { isFetching, isFetchingNextPage, fetchNextPage } = strategy.meta;
|
|
48
|
+
const hasNextPage = rowCount == null ? false : queryData.length < rowCount;
|
|
49
|
+
const selectedData = useMemo(() => queryData.filter((node) => selection?.rowSelection?.[node.id] === true), [queryData, selection?.rowSelection]);
|
|
50
|
+
return /* @__PURE__ */ jsxs(DriveGrid, {
|
|
51
|
+
...props,
|
|
52
|
+
children: [
|
|
53
|
+
queryData.length > 0 ? queryData.filter((node) => !node.hidden).map((node) => /* @__PURE__ */ jsx(DriveGridCard, {
|
|
54
|
+
node,
|
|
55
|
+
commands,
|
|
56
|
+
imageLoader: localDriveImageLoader
|
|
57
|
+
}, node.id)) : /* @__PURE__ */ jsx(DriveGridEmpty, { title: "Geen resultaten gevonden" }),
|
|
58
|
+
isFetchingNextPage && Array.from({ length: paginationState?.pageSize ?? 0 }).map((_, index) => /* @__PURE__ */ jsx(DriveGridCardSkeleton, {}, index)),
|
|
59
|
+
/* @__PURE__ */ jsx(DriveGridBottombar, {
|
|
60
|
+
hasNextPage,
|
|
61
|
+
fetchNextPage,
|
|
62
|
+
isFetching,
|
|
63
|
+
isFetchingNextPage
|
|
64
|
+
}),
|
|
65
|
+
commands && commands.length > 0 && /* @__PURE__ */ jsx(FloatingCommandMenu, {
|
|
66
|
+
data: selectedData,
|
|
67
|
+
commands,
|
|
68
|
+
meta,
|
|
69
|
+
state: selectedData.length > 0 ? "open" : "closed",
|
|
70
|
+
onSuccess: () => {
|
|
71
|
+
selection?.setRowSelection?.({});
|
|
72
|
+
optimistic?.invalidate?.();
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function LocalDriveList(props) {
|
|
79
|
+
return /* @__PURE__ */ jsx(DataTable, { ...props });
|
|
80
|
+
}
|
|
81
|
+
function LocalDriveViewLoading({ ...props }) {
|
|
82
|
+
const { view } = useDriveViewContext();
|
|
83
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
84
|
+
...props,
|
|
85
|
+
children: [view === "grid" && /* @__PURE__ */ jsx(DriveGridLoading, { ...props }), view === "list" && /* @__PURE__ */ jsx(TableSkeleton, { ...props })]
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
export { LocalDriveView, LocalDriveViewLoading, LocalDriveViewProvider };
|
|
91
|
+
//# sourceMappingURL=view.client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.client.mjs","names":[],"sources":["../../../../src/providers/local/components/view.client.tsx"],"sourcesContent":["\"use client\";\n\nimport type { VisibilityState } from \"@tanstack/react-table\";\nimport type { CommandDef } from \"@tulip-systems/core/commands\";\nimport { FloatingCommandMenu } from \"@tulip-systems/core/commands/client\";\nimport { type TableColumnDef, TableLayout, TableSkeleton } from \"@tulip-systems/core/data-tables\";\nimport {\n createTableConfig,\n DataTable,\n type InfiniteStrategyMeta,\n TableConfigProvider,\n type useInfiniteStrategy,\n useTableConfigContext,\n} from \"@tulip-systems/core/data-tables/client\";\nimport { type ComponentProps, useMemo } from \"react\";\nimport {\n DriveGrid,\n DriveGridBottombar,\n DriveGridEmpty,\n DriveGridLoading,\n} from \"@/components/grid.client\";\nimport { DriveGridCard, DriveGridCardSkeleton } from \"@/components/grid-card.client\";\nimport { useDriveSelectionContext } from \"@/components/selection.client\";\nimport { useDriveViewContext } from \"@/components/view.client\";\nimport { localDriveColumns } from \"../config/columns-data\";\nimport { localDriveImageLoader } from \"../lib/helpers\";\nimport type { LocalDriveNodeWithAsset } from \"../lib/validators\";\nimport { useLocalDriveContext } from \"./provider.client\";\nimport { useLocalDriveUploadZone } from \"./upload-zone-context.client\";\n\ntype LocalDriveViewProviderProps<TData extends LocalDriveNodeWithAsset = LocalDriveNodeWithAsset> =\n ComponentProps<\"div\"> & {\n queryData: TData[];\n columns?: TableColumnDef<TData>[];\n strategy: ReturnType<typeof useInfiniteStrategy>;\n commands?: CommandDef<TData>[];\n columnVisibility?: VisibilityState;\n };\n\nexport function LocalDriveViewProvider<\n TData extends LocalDriveNodeWithAsset = LocalDriveNodeWithAsset,\n>({\n queryData,\n columns = localDriveColumns as TableColumnDef<TData>[],\n strategy,\n commands,\n columnVisibility,\n children,\n ...props\n}: LocalDriveViewProviderProps<TData>) {\n const { meta } = useLocalDriveContext();\n const { selection } = useDriveSelectionContext();\n\n const config = createTableConfig<TData>({\n queryData,\n columns,\n strategy,\n commands,\n meta,\n columnVisibility,\n selection,\n });\n\n return (\n <TableConfigProvider config={config}>\n <TableLayout {...props}>{children}</TableLayout>\n </TableConfigProvider>\n );\n}\n\nexport function LocalDriveView() {\n const { view } = useDriveViewContext();\n\n if (view === \"grid\") return <LocalDriveGrid />;\n if (view === \"list\") return <LocalDriveList />;\n\n return null;\n}\n\nfunction LocalDriveGrid(props: ComponentProps<\"div\">) {\n const { queryData, strategy, commands, selection, meta } =\n useTableConfigContext<LocalDriveNodeWithAsset>();\n const { optimistic } = useLocalDriveUploadZone();\n\n const { rowCount, paginationState } = strategy;\n const { isFetching, isFetchingNextPage, fetchNextPage } = strategy.meta as InfiniteStrategyMeta;\n\n const hasNextPage = rowCount == null ? false : queryData.length < rowCount;\n\n const selectedData = useMemo(\n () => queryData.filter((node) => selection?.rowSelection?.[node.id] === true),\n [queryData, selection?.rowSelection],\n );\n\n return (\n <DriveGrid {...props}>\n {queryData.length > 0 ? (\n queryData\n .filter((node) => !node.hidden)\n .map((node) => (\n <DriveGridCard\n key={node.id}\n node={node}\n commands={commands}\n imageLoader={localDriveImageLoader}\n />\n ))\n ) : (\n <DriveGridEmpty title=\"Geen resultaten gevonden\" />\n )}\n\n {isFetchingNextPage &&\n Array.from({ length: paginationState?.pageSize ?? 0 }).map((_, index) => (\n <DriveGridCardSkeleton key={index} />\n ))}\n\n <DriveGridBottombar\n hasNextPage={hasNextPage}\n fetchNextPage={fetchNextPage}\n isFetching={isFetching}\n isFetchingNextPage={isFetchingNextPage}\n />\n\n {commands && commands.length > 0 && (\n <FloatingCommandMenu\n data={selectedData as never}\n commands={commands as never}\n meta={meta}\n state={selectedData.length > 0 ? \"open\" : \"closed\"}\n onSuccess={() => {\n selection?.setRowSelection?.({});\n void optimistic?.invalidate?.();\n }}\n />\n )}\n </DriveGrid>\n );\n}\n\nfunction LocalDriveList(props: ComponentProps<typeof DataTable>) {\n return <DataTable {...props} />;\n}\n\nexport function LocalDriveViewLoading({ ...props }: ComponentProps<\"div\">) {\n const { view } = useDriveViewContext();\n\n return (\n <div {...props}>\n {view === \"grid\" && <DriveGridLoading {...props} />}\n {view === \"list\" && <TableSkeleton {...props} />}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAuCA,SAAgB,uBAEd,EACA,WACA,UAAU,mBACV,UACA,UACA,kBACA,UACA,GAAG,SACkC;CACrC,MAAM,EAAE,SAAS,sBAAsB;CACvC,MAAM,EAAE,cAAc,0BAA0B;AAYhD,QACE,oBAAC;EAAoB,QAXR,kBAAyB;GACtC;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;YAIE,oBAAC;GAAY,GAAI;GAAQ;IAAuB;GAC5B;;AAI1B,SAAgB,iBAAiB;CAC/B,MAAM,EAAE,SAAS,qBAAqB;AAEtC,KAAI,SAAS,OAAQ,QAAO,oBAAC,mBAAiB;AAC9C,KAAI,SAAS,OAAQ,QAAO,oBAAC,mBAAiB;AAE9C,QAAO;;AAGT,SAAS,eAAe,OAA8B;CACpD,MAAM,EAAE,WAAW,UAAU,UAAU,WAAW,SAChD,uBAAgD;CAClD,MAAM,EAAE,eAAe,yBAAyB;CAEhD,MAAM,EAAE,UAAU,oBAAoB;CACtC,MAAM,EAAE,YAAY,oBAAoB,kBAAkB,SAAS;CAEnE,MAAM,cAAc,YAAY,OAAO,QAAQ,UAAU,SAAS;CAElE,MAAM,eAAe,cACb,UAAU,QAAQ,SAAS,WAAW,eAAe,KAAK,QAAQ,KAAK,EAC7E,CAAC,WAAW,WAAW,aAAa,CACrC;AAED,QACE,qBAAC;EAAU,GAAI;;GACZ,UAAU,SAAS,IAClB,UACG,QAAQ,SAAS,CAAC,KAAK,OAAO,CAC9B,KAAK,SACJ,oBAAC;IAEO;IACI;IACV,aAAa;MAHR,KAAK,GAIV,CACF,GAEJ,oBAAC,kBAAe,OAAM,6BAA6B;GAGpD,sBACC,MAAM,KAAK,EAAE,QAAQ,iBAAiB,YAAY,GAAG,CAAC,CAAC,KAAK,GAAG,UAC7D,oBAAC,2BAA2B,MAAS,CACrC;GAEJ,oBAAC;IACc;IACE;IACH;IACQ;KACpB;GAED,YAAY,SAAS,SAAS,KAC7B,oBAAC;IACC,MAAM;IACI;IACJ;IACN,OAAO,aAAa,SAAS,IAAI,SAAS;IAC1C,iBAAiB;AACf,gBAAW,kBAAkB,EAAE,CAAC;AAChC,KAAK,YAAY,cAAc;;KAEjC;;GAEM;;AAIhB,SAAS,eAAe,OAAyC;AAC/D,QAAO,oBAAC,aAAU,GAAI,QAAS;;AAGjC,SAAgB,sBAAsB,EAAE,GAAG,SAAgC;CACzE,MAAM,EAAE,SAAS,qBAAqB;AAEtC,QACE,qBAAC;EAAI,GAAI;aACN,SAAS,UAAU,oBAAC,oBAAiB,GAAI,QAAS,EAClD,SAAS,UAAU,oBAAC,iBAAc,GAAI,QAAS;GAC5C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LocalDriveNodeWithAsset } from "../lib/validators.mjs";
|
|
2
|
+
import { TableColumnDef } from "@tulip-systems/core/data-tables";
|
|
3
|
+
|
|
4
|
+
//#region src/providers/local/config/columns-data.d.ts
|
|
5
|
+
declare const localDriveColumns: TableColumnDef<LocalDriveNodeWithAsset>[];
|
|
6
|
+
//#endregion
|
|
7
|
+
export { localDriveColumns };
|
|
8
|
+
//# sourceMappingURL=columns-data.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns-data.d.mts","names":[],"sources":["../../../../src/providers/local/config/columns-data.tsx"],"mappings":";;;;cAaa,iBAAA,EAAmB,cAAA,CAAe,uBAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { driveTreeSearchParams } from "../../../lib/search-params.mjs";
|
|
4
|
+
import { nodeSubtypeConfig, nodeSubtypeVariants } from "../../../config/types.mjs";
|
|
5
|
+
import { TableColumnHeader } from "@tulip-systems/core/data-tables";
|
|
6
|
+
import { findStatus } from "@tulip-systems/core/components";
|
|
7
|
+
import { FolderIcon } from "lucide-react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "@tulip-systems/core/components/client";
|
|
10
|
+
import { TableTextCell, createTableSelectCell } from "@tulip-systems/core/data-tables/client";
|
|
11
|
+
import Link from "next/link";
|
|
12
|
+
import { createSerializer, useQueryStates } from "nuqs";
|
|
13
|
+
|
|
14
|
+
//#region src/providers/local/config/columns-data.tsx
|
|
15
|
+
const localDriveColumns = [
|
|
16
|
+
createTableSelectCell(),
|
|
17
|
+
{
|
|
18
|
+
id: "icon",
|
|
19
|
+
accessorKey: "icon",
|
|
20
|
+
header: () => null,
|
|
21
|
+
cell: ({ row }) => {
|
|
22
|
+
if (row.original.type === "file") {
|
|
23
|
+
const subtype = findStatus(nodeSubtypeConfig, row.original.subtype);
|
|
24
|
+
if (!subtype) return null;
|
|
25
|
+
return /* @__PURE__ */ jsx(TableTextCell, {
|
|
26
|
+
className: "w-4",
|
|
27
|
+
children: /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, { children: /* @__PURE__ */ jsx(subtype.icon, { className: nodeSubtypeVariants({
|
|
28
|
+
status: row.original.subtype,
|
|
29
|
+
className: "size-4"
|
|
30
|
+
}) }) }), /* @__PURE__ */ jsx(TooltipContent, { children: subtype.label })] })
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (row.original.type === "folder") return /* @__PURE__ */ jsx(TableTextCell, {
|
|
34
|
+
className: "w-4",
|
|
35
|
+
children: /* @__PURE__ */ jsx(FolderIcon, { className: "w-4 min-w-4" })
|
|
36
|
+
});
|
|
37
|
+
return null;
|
|
38
|
+
},
|
|
39
|
+
enableSorting: false
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: "name",
|
|
43
|
+
accessorKey: "name",
|
|
44
|
+
header: ({ column }) => /* @__PURE__ */ jsx(TableColumnHeader, {
|
|
45
|
+
column,
|
|
46
|
+
title: "Naam"
|
|
47
|
+
}),
|
|
48
|
+
cell: ({ row }) => {
|
|
49
|
+
const [query] = useQueryStates(driveTreeSearchParams);
|
|
50
|
+
const serialize = createSerializer(driveTreeSearchParams);
|
|
51
|
+
return /* @__PURE__ */ jsx(TableTextCell, {
|
|
52
|
+
className: "w-full min-w-64",
|
|
53
|
+
children: /* @__PURE__ */ jsx(Link, {
|
|
54
|
+
href: row.original.type === "file" ? row.original.links.view ?? "#" : serialize({
|
|
55
|
+
...query,
|
|
56
|
+
parentId: row.original.id
|
|
57
|
+
}),
|
|
58
|
+
className: "truncate hover:underline",
|
|
59
|
+
target: row.original.type === "file" ? "_blank" : "_self",
|
|
60
|
+
children: row.getValue("name")
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
enableSorting: false
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
export { localDriveColumns };
|
|
70
|
+
//# sourceMappingURL=columns-data.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns-data.mjs","names":[],"sources":["../../../../src/providers/local/config/columns-data.tsx"],"sourcesContent":["\"use client\";\n\nimport { findStatus } from \"@tulip-systems/core/components\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@tulip-systems/core/components/client\";\nimport { type TableColumnDef, TableColumnHeader } from \"@tulip-systems/core/data-tables\";\nimport { createTableSelectCell, TableTextCell } from \"@tulip-systems/core/data-tables/client\";\nimport { FolderIcon } from \"lucide-react\";\nimport Link from \"next/link\";\nimport { createSerializer, useQueryStates } from \"nuqs\";\nimport { nodeSubtypeConfig, nodeSubtypeVariants } from \"@/config/types\";\nimport { driveTreeSearchParams } from \"@/lib/search-params\";\nimport type { LocalDriveNodeWithAsset } from \"../lib/validators\";\n\nexport const localDriveColumns: TableColumnDef<LocalDriveNodeWithAsset>[] = [\n createTableSelectCell(),\n {\n id: \"icon\",\n accessorKey: \"icon\",\n header: () => null,\n cell: ({ row }) => {\n if (row.original.type === \"file\") {\n const subtype = findStatus(nodeSubtypeConfig, row.original.subtype);\n if (!subtype) return null;\n\n return (\n <TableTextCell className=\"w-4\">\n <Tooltip>\n <TooltipTrigger>\n <subtype.icon\n className={nodeSubtypeVariants({\n status: row.original.subtype,\n className: \"size-4\",\n })}\n />\n </TooltipTrigger>\n\n <TooltipContent>{subtype.label}</TooltipContent>\n </Tooltip>\n </TableTextCell>\n );\n }\n\n if (row.original.type === \"folder\") {\n return (\n <TableTextCell className=\"w-4\">\n <FolderIcon className=\"w-4 min-w-4\" />\n </TableTextCell>\n );\n }\n\n return null;\n },\n enableSorting: false,\n },\n {\n id: \"name\",\n accessorKey: \"name\",\n header: ({ column }) => <TableColumnHeader column={column} title=\"Naam\" />,\n cell: ({ row }) => {\n const [query] = useQueryStates(driveTreeSearchParams);\n const serialize = createSerializer(driveTreeSearchParams);\n\n return (\n <TableTextCell className=\"w-full min-w-64\">\n <Link\n href={\n row.original.type === \"file\"\n ? ((row.original.links.view as string) ?? \"#\")\n : serialize({ ...query, parentId: row.original.id })\n }\n className=\"truncate hover:underline\"\n target={row.original.type === \"file\" ? \"_blank\" : \"_self\"}\n >\n {row.getValue(\"name\")}\n </Link>\n </TableTextCell>\n );\n },\n enableSorting: false,\n },\n];\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,oBAA+D;CAC1E,uBAAuB;CACvB;EACE,IAAI;EACJ,aAAa;EACb,cAAc;EACd,OAAO,EAAE,UAAU;AACjB,OAAI,IAAI,SAAS,SAAS,QAAQ;IAChC,MAAM,UAAU,WAAW,mBAAmB,IAAI,SAAS,QAAQ;AACnE,QAAI,CAAC,QAAS,QAAO;AAErB,WACE,oBAAC;KAAc,WAAU;eACvB,qBAAC,sBACC,oBAAC,4BACC,oBAAC,QAAQ,QACP,WAAW,oBAAoB;MAC7B,QAAQ,IAAI,SAAS;MACrB,WAAW;MACZ,CAAC,GACF,GACa,EAEjB,oBAAC,4BAAgB,QAAQ,QAAuB,IACxC;MACI;;AAIpB,OAAI,IAAI,SAAS,SAAS,SACxB,QACE,oBAAC;IAAc,WAAU;cACvB,oBAAC,cAAW,WAAU,gBAAgB;KACxB;AAIpB,UAAO;;EAET,eAAe;EAChB;CACD;EACE,IAAI;EACJ,aAAa;EACb,SAAS,EAAE,aAAa,oBAAC;GAA0B;GAAQ,OAAM;IAAS;EAC1E,OAAO,EAAE,UAAU;GACjB,MAAM,CAAC,SAAS,eAAe,sBAAsB;GACrD,MAAM,YAAY,iBAAiB,sBAAsB;AAEzD,UACE,oBAAC;IAAc,WAAU;cACvB,oBAAC;KACC,MACE,IAAI,SAAS,SAAS,SAChB,IAAI,SAAS,MAAM,QAAmB,MACxC,UAAU;MAAE,GAAG;MAAO,UAAU,IAAI,SAAS;MAAI,CAAC;KAExD,WAAU;KACV,QAAQ,IAAI,SAAS,SAAS,SAAS,WAAW;eAEjD,IAAI,SAAS,OAAO;MAChB;KACO;;EAGpB,eAAe;EAChB;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import z$1 from "zod";
|
|
2
|
+
import * as _tulip_systems_core_data_tables0 from "@tulip-systems/core/data-tables";
|
|
3
|
+
|
|
4
|
+
//#region src/providers/local/config/filters.d.ts
|
|
5
|
+
declare const localDriveFilters: {
|
|
6
|
+
subtypes: _tulip_systems_core_data_tables0.ParseFilter<z$1.ZodArray<z$1.ZodEnum<{
|
|
7
|
+
image: "image";
|
|
8
|
+
document: "document";
|
|
9
|
+
spreadsheet: "spreadsheet";
|
|
10
|
+
video: "video";
|
|
11
|
+
audio: "audio";
|
|
12
|
+
archive: "archive";
|
|
13
|
+
other: "other";
|
|
14
|
+
}>>>;
|
|
15
|
+
hidden: _tulip_systems_core_data_tables0.ParseFilter<z$1.ZodBoolean>;
|
|
16
|
+
types: _tulip_systems_core_data_tables0.ParseFilter<z$1.ZodArray<z$1.ZodEnum<{
|
|
17
|
+
file: "file";
|
|
18
|
+
folder: "folder";
|
|
19
|
+
}>>>;
|
|
20
|
+
contentTypes: _tulip_systems_core_data_tables0.ParseFilter<z$1.ZodArray<z$1.ZodString>>;
|
|
21
|
+
nodeIds: _tulip_systems_core_data_tables0.ParseFilter<z$1.ZodArray<z$1.ZodString>>;
|
|
22
|
+
isArchived: _tulip_systems_core_data_tables0.ParseFilter<z$1.ZodBoolean>;
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { localDriveFilters };
|
|
26
|
+
//# sourceMappingURL=filters.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.mts","names":[],"sources":["../../../../src/providers/local/config/filters.ts"],"mappings":";;;;cASa,iBAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { driveTreeFilters } from "../../../config/filters.mjs";
|
|
2
|
+
import { nodeSubtypes } from "../lib/constants.mjs";
|
|
3
|
+
import z$1 from "zod";
|
|
4
|
+
import { createTableFilters, parseFilterArray, parseFilterBoolean } from "@tulip-systems/core/data-tables";
|
|
5
|
+
|
|
6
|
+
//#region src/providers/local/config/filters.ts
|
|
7
|
+
const localDriveFilters = createTableFilters({
|
|
8
|
+
...driveTreeFilters,
|
|
9
|
+
subtypes: parseFilterArray(z$1.array(z$1.enum(nodeSubtypes))),
|
|
10
|
+
hidden: parseFilterBoolean(z$1.boolean())
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { localDriveFilters };
|
|
15
|
+
//# sourceMappingURL=filters.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.mjs","names":["z"],"sources":["../../../../src/providers/local/config/filters.ts"],"sourcesContent":["import {\n createTableFilters,\n parseFilterArray,\n parseFilterBoolean,\n} from \"@tulip-systems/core/data-tables\";\nimport z from \"zod\";\nimport { driveTreeFilters } from \"@/config/filters\";\nimport { nodeSubtypes } from \"../lib/constants\";\n\nexport const localDriveFilters = createTableFilters({\n ...driveTreeFilters,\n subtypes: parseFilterArray(z.array(z.enum(nodeSubtypes))),\n hidden: parseFilterBoolean(z.boolean()),\n});\n"],"mappings":";;;;;;AASA,MAAa,oBAAoB,mBAAmB;CAClD,GAAG;CACH,UAAU,iBAAiBA,IAAE,MAAMA,IAAE,KAAK,aAAa,CAAC,CAAC;CACzD,QAAQ,mBAAmBA,IAAE,SAAS,CAAC;CACxC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/providers/local/lib/constants.d.ts
|
|
2
|
+
declare const deviceSizes: number[];
|
|
3
|
+
declare const imageSizes: number[];
|
|
4
|
+
declare const imageVariants: readonly ["main", ...`preview-${number}`[]];
|
|
5
|
+
type ImageVariant = (typeof imageVariants)[number];
|
|
6
|
+
/**
|
|
7
|
+
* Node subtype
|
|
8
|
+
*/
|
|
9
|
+
declare const nodeSubtypes: readonly ["image", "document", "spreadsheet", "video", "audio", "archive", "other"];
|
|
10
|
+
//#endregion
|
|
11
|
+
export { ImageVariant, deviceSizes, imageSizes, imageVariants, nodeSubtypes };
|
|
12
|
+
//# sourceMappingURL=constants.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.mts","names":[],"sources":["../../../../src/providers/local/lib/constants.ts"],"mappings":";cACa,WAAA;AAAA,cACA,UAAA;AAAA,cAGA,aAAA;AAAA,KAID,YAAA,WAAuB,aAAA;;;AAPnC;cAYa,YAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/providers/local/lib/constants.ts
|
|
2
|
+
const deviceSizes = [
|
|
3
|
+
640,
|
|
4
|
+
750,
|
|
5
|
+
828,
|
|
6
|
+
1080,
|
|
7
|
+
1200,
|
|
8
|
+
1920,
|
|
9
|
+
2048,
|
|
10
|
+
3840
|
|
11
|
+
];
|
|
12
|
+
const imageSizes = deviceSizes;
|
|
13
|
+
const imageVariants = ["main", ...deviceSizes.map((size) => `preview-${size}`)];
|
|
14
|
+
/**
|
|
15
|
+
* Node subtype
|
|
16
|
+
*/
|
|
17
|
+
const nodeSubtypes = [
|
|
18
|
+
"image",
|
|
19
|
+
"document",
|
|
20
|
+
"spreadsheet",
|
|
21
|
+
"video",
|
|
22
|
+
"audio",
|
|
23
|
+
"archive",
|
|
24
|
+
"other"
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { deviceSizes, imageSizes, imageVariants, nodeSubtypes };
|
|
29
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../../src/providers/local/lib/constants.ts"],"sourcesContent":["// Device sizes\nexport const deviceSizes = [640, 750, 828, 1080, 1200, 1920, 2048, 3840];\nexport const imageSizes = deviceSizes;\n\n// Image variants\nexport const imageVariants = [\n \"main\",\n ...deviceSizes.map((size) => `preview-${size}` as const),\n] as const;\nexport type ImageVariant = (typeof imageVariants)[number];\n\n/**\n * Node subtype\n */\nexport const nodeSubtypes = [\n \"image\",\n \"document\",\n \"spreadsheet\",\n \"video\",\n \"audio\",\n \"archive\",\n \"other\",\n] as const;\n"],"mappings":";AACA,MAAa,cAAc;CAAC;CAAK;CAAK;CAAK;CAAM;CAAM;CAAM;CAAM;CAAK;AACxE,MAAa,aAAa;AAG1B,MAAa,gBAAgB,CAC3B,QACA,GAAG,YAAY,KAAK,SAAS,WAAW,OAAgB,CACzD;;;;AAMD,MAAa,eAAe;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { GetLocalFileURLSchema, LocalDriveNode, LocalNode } from "./validators.mjs";
|
|
2
|
+
import { nodeSubtypes } from "./constants.mjs";
|
|
3
|
+
import { ImageLoaderProps } from "next/image";
|
|
4
|
+
|
|
5
|
+
//#region src/providers/local/lib/helpers.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Convert a LocalNode to LocalDriveNode by adding provider and links
|
|
8
|
+
* @param node The LocalNode to convert
|
|
9
|
+
* @returns The converted LocalDriveNode
|
|
10
|
+
*/
|
|
11
|
+
declare function toLocalDriveNode<TNode extends LocalNode>(node: TNode): LocalDriveNode;
|
|
12
|
+
/**
|
|
13
|
+
* Check if the node is a file
|
|
14
|
+
*/
|
|
15
|
+
declare function isLocalDriveFile(node: Pick<LocalNode, "type">): node is LocalNode;
|
|
16
|
+
/**
|
|
17
|
+
* Check if the node is a folder
|
|
18
|
+
*/
|
|
19
|
+
declare function isLocalDriveFolder(node: Pick<LocalNode, "type">): node is LocalNode;
|
|
20
|
+
/**
|
|
21
|
+
* Get file url
|
|
22
|
+
*/
|
|
23
|
+
declare function getLocalDriveFileUrl(id: string, options?: Partial<GetLocalFileURLSchema>): string;
|
|
24
|
+
/**
|
|
25
|
+
* Image loader
|
|
26
|
+
*/
|
|
27
|
+
declare function localDriveImageLoader({
|
|
28
|
+
src,
|
|
29
|
+
width
|
|
30
|
+
}: ImageLoaderProps): string;
|
|
31
|
+
/**
|
|
32
|
+
* Node subtype inference
|
|
33
|
+
*/
|
|
34
|
+
type LocalDriveNodeSubtype = (typeof nodeSubtypes)[number];
|
|
35
|
+
declare function inferLocalDriveNodeSubtype({
|
|
36
|
+
name,
|
|
37
|
+
contentType
|
|
38
|
+
}: Partial<Pick<LocalDriveNode, "name" | "contentType">>): LocalDriveNodeSubtype;
|
|
39
|
+
/**
|
|
40
|
+
* Render bytes
|
|
41
|
+
*/
|
|
42
|
+
declare function renderBytes(bytes: number): string;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { LocalDriveNodeSubtype, getLocalDriveFileUrl, inferLocalDriveNodeSubtype, isLocalDriveFile, isLocalDriveFolder, localDriveImageLoader, renderBytes, toLocalDriveNode };
|
|
45
|
+
//# sourceMappingURL=helpers.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.mts","names":[],"sources":["../../../../src/providers/local/lib/helpers.ts"],"mappings":";;;;;;;AASA;;;iBAAgB,gBAAA,eAA+B,SAAA,CAAA,CAAW,IAAA,EAAM,KAAA,GAAQ,cAAA;;;;iBAsBxD,gBAAA,CAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,YAAqB,IAAA,IAAQ,SAAA;;;;iBAOzD,kBAAA,CAAmB,IAAA,EAAM,IAAA,CAAK,SAAA,YAAqB,IAAA,IAAQ,SAAA;;;;iBAO3D,oBAAA,CAAqB,EAAA,UAAY,OAAA,GAAS,OAAA,CAAQ,qBAAA;;;;iBAYlD,qBAAA,CAAA;EAAwB,GAAA;EAAK;AAAA,GAAS,gBAAA;;;;KAS1C,qBAAA,WAAgC,YAAA;AAAA,iBAE5B,0BAAA,CAAA;EACd,IAAA;EACA;AAAA,GACC,OAAA,CAAQ,IAAA,CAAK,cAAA,6BAA2C,qBAAA;;;;iBAoB3C,WAAA,CAAY,KAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
//#region src/providers/local/lib/helpers.ts
|
|
2
|
+
/**
|
|
3
|
+
* Convert a LocalNode to LocalDriveNode by adding provider and links
|
|
4
|
+
* @param node The LocalNode to convert
|
|
5
|
+
* @returns The converted LocalDriveNode
|
|
6
|
+
*/
|
|
7
|
+
function toLocalDriveNode(node) {
|
|
8
|
+
return {
|
|
9
|
+
...node,
|
|
10
|
+
type: node.type,
|
|
11
|
+
readonly: node.readonly ?? false,
|
|
12
|
+
hidden: node.hidden ?? false,
|
|
13
|
+
provider: "local",
|
|
14
|
+
links: {
|
|
15
|
+
view: node.type === "file" ? getLocalDriveFileUrl(node.id, { disposition: "inline" }) : null,
|
|
16
|
+
download: node.type === "file" ? getLocalDriveFileUrl(node.id, { disposition: "attachment" }) : null,
|
|
17
|
+
preview: node.type === "file" ? getLocalDriveFileUrl(node.id) : null,
|
|
18
|
+
thumbnail: node.type === "file" ? getLocalDriveFileUrl(node.id, { variant: "preview-256" }) : null
|
|
19
|
+
},
|
|
20
|
+
availability: "ready"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if the node is a file
|
|
25
|
+
*/
|
|
26
|
+
function isLocalDriveFile(node) {
|
|
27
|
+
return node.type === "file";
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if the node is a folder
|
|
31
|
+
*/
|
|
32
|
+
function isLocalDriveFolder(node) {
|
|
33
|
+
return node.type === "folder";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get file url
|
|
37
|
+
*/
|
|
38
|
+
function getLocalDriveFileUrl(id, options = {}) {
|
|
39
|
+
const searchParams = new URLSearchParams();
|
|
40
|
+
if (options?.variant) searchParams.set("variant", options.variant);
|
|
41
|
+
if (options?.disposition) searchParams.set("disposition", options.disposition);
|
|
42
|
+
const queryString = searchParams.toString();
|
|
43
|
+
return `/api/drive/files/${id}${queryString ? `?${queryString}` : ""}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Image loader
|
|
47
|
+
*/
|
|
48
|
+
function localDriveImageLoader({ src, width }) {
|
|
49
|
+
const url = new URL(src, window.location.origin);
|
|
50
|
+
url.searchParams.set("variant", `preview-${width}`);
|
|
51
|
+
return url.toString();
|
|
52
|
+
}
|
|
53
|
+
function inferLocalDriveNodeSubtype({ name, contentType }) {
|
|
54
|
+
if (contentType?.startsWith("image/")) return "image";
|
|
55
|
+
if (contentType === "application/pdf") return "document";
|
|
56
|
+
if (contentType?.includes("spreadsheet")) return "spreadsheet";
|
|
57
|
+
if (contentType?.startsWith("video/")) return "video";
|
|
58
|
+
if (contentType?.startsWith("audio/")) return "audio";
|
|
59
|
+
if (contentType?.includes("zip") || contentType?.includes("archive")) return "archive";
|
|
60
|
+
const ext = name?.split(".").pop()?.toLowerCase();
|
|
61
|
+
if ([
|
|
62
|
+
"jpg",
|
|
63
|
+
"jpeg",
|
|
64
|
+
"png",
|
|
65
|
+
"gif",
|
|
66
|
+
"bmp",
|
|
67
|
+
"webp"
|
|
68
|
+
].includes(ext ?? "")) return "image";
|
|
69
|
+
if ([
|
|
70
|
+
"pdf",
|
|
71
|
+
"doc",
|
|
72
|
+
"docx",
|
|
73
|
+
"txt"
|
|
74
|
+
].includes(ext ?? "")) return "document";
|
|
75
|
+
if ([
|
|
76
|
+
"xls",
|
|
77
|
+
"xlsx",
|
|
78
|
+
"ods"
|
|
79
|
+
].includes(ext ?? "")) return "spreadsheet";
|
|
80
|
+
if ([
|
|
81
|
+
"zip",
|
|
82
|
+
"rar",
|
|
83
|
+
"7z"
|
|
84
|
+
].includes(ext ?? "")) return "archive";
|
|
85
|
+
return "other";
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Render bytes
|
|
89
|
+
*/
|
|
90
|
+
function renderBytes(bytes) {
|
|
91
|
+
const units = [
|
|
92
|
+
"B",
|
|
93
|
+
"KB",
|
|
94
|
+
"MB",
|
|
95
|
+
"GB",
|
|
96
|
+
"TB",
|
|
97
|
+
"PB"
|
|
98
|
+
];
|
|
99
|
+
let size = bytes;
|
|
100
|
+
let unitIndex = 0;
|
|
101
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
102
|
+
size /= 1024;
|
|
103
|
+
unitIndex++;
|
|
104
|
+
}
|
|
105
|
+
return `${size.toFixed(2)}${units[unitIndex]}`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
export { getLocalDriveFileUrl, inferLocalDriveNodeSubtype, isLocalDriveFile, isLocalDriveFolder, localDriveImageLoader, renderBytes, toLocalDriveNode };
|
|
110
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/providers/local/lib/helpers.ts"],"sourcesContent":["import type { ImageLoaderProps } from \"next/image\";\nimport type { nodeSubtypes } from \"./constants\";\nimport type { GetLocalFileURLSchema, LocalDriveNode, LocalNode } from \"./validators\";\n\n/**\n * Convert a LocalNode to LocalDriveNode by adding provider and links\n * @param node The LocalNode to convert\n * @returns The converted LocalDriveNode\n */\nexport function toLocalDriveNode<TNode extends LocalNode>(node: TNode): LocalDriveNode {\n return {\n ...node,\n type: node.type as LocalDriveNode[\"type\"],\n readonly: node.readonly ?? false,\n hidden: node.hidden ?? false,\n provider: \"local\" as const,\n links: {\n view: node.type === \"file\" ? getLocalDriveFileUrl(node.id, { disposition: \"inline\" }) : null,\n download:\n node.type === \"file\" ? getLocalDriveFileUrl(node.id, { disposition: \"attachment\" }) : null,\n preview: node.type === \"file\" ? getLocalDriveFileUrl(node.id) : null,\n thumbnail:\n node.type === \"file\" ? getLocalDriveFileUrl(node.id, { variant: \"preview-256\" }) : null,\n },\n availability: \"ready\" as const,\n } satisfies LocalDriveNode;\n}\n\n/**\n * Check if the node is a file\n */\nexport function isLocalDriveFile(node: Pick<LocalNode, \"type\">): node is LocalNode {\n return node.type === \"file\";\n}\n\n/**\n * Check if the node is a folder\n */\nexport function isLocalDriveFolder(node: Pick<LocalNode, \"type\">): node is LocalNode {\n return node.type === \"folder\";\n}\n\n/**\n * Get file url\n */\nexport function getLocalDriveFileUrl(id: string, options: Partial<GetLocalFileURLSchema> = {}) {\n const searchParams = new URLSearchParams();\n if (options?.variant) searchParams.set(\"variant\", options.variant);\n if (options?.disposition) searchParams.set(\"disposition\", options.disposition);\n\n const queryString = searchParams.toString();\n return `/api/drive/files/${id}${queryString ? `?${queryString}` : \"\"}`;\n}\n\n/**\n * Image loader\n */\nexport function localDriveImageLoader({ src, width }: ImageLoaderProps) {\n const url = new URL(src, window.location.origin);\n url.searchParams.set(\"variant\", `preview-${width}`);\n return url.toString();\n}\n\n/**\n * Node subtype inference\n */\nexport type LocalDriveNodeSubtype = (typeof nodeSubtypes)[number];\n\nexport function inferLocalDriveNodeSubtype({\n name,\n contentType,\n}: Partial<Pick<LocalDriveNode, \"name\" | \"contentType\">>): LocalDriveNodeSubtype {\n if (contentType?.startsWith(\"image/\")) return \"image\";\n if (contentType === \"application/pdf\") return \"document\";\n if (contentType?.includes(\"spreadsheet\")) return \"spreadsheet\";\n if (contentType?.startsWith(\"video/\")) return \"video\";\n if (contentType?.startsWith(\"audio/\")) return \"audio\";\n if (contentType?.includes(\"zip\") || contentType?.includes(\"archive\")) return \"archive\";\n\n const ext = name?.split(\".\").pop()?.toLowerCase();\n if ([\"jpg\", \"jpeg\", \"png\", \"gif\", \"bmp\", \"webp\"].includes(ext ?? \"\")) return \"image\";\n if ([\"pdf\", \"doc\", \"docx\", \"txt\"].includes(ext ?? \"\")) return \"document\";\n if ([\"xls\", \"xlsx\", \"ods\"].includes(ext ?? \"\")) return \"spreadsheet\";\n if ([\"zip\", \"rar\", \"7z\"].includes(ext ?? \"\")) return \"archive\";\n\n return \"other\";\n}\n\n/**\n * Render bytes\n */\nexport function renderBytes(bytes: number) {\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(2)}${units[unitIndex]}`;\n}\n"],"mappings":";;;;;;AASA,SAAgB,iBAA0C,MAA6B;AACrF,QAAO;EACL,GAAG;EACH,MAAM,KAAK;EACX,UAAU,KAAK,YAAY;EAC3B,QAAQ,KAAK,UAAU;EACvB,UAAU;EACV,OAAO;GACL,MAAM,KAAK,SAAS,SAAS,qBAAqB,KAAK,IAAI,EAAE,aAAa,UAAU,CAAC,GAAG;GACxF,UACE,KAAK,SAAS,SAAS,qBAAqB,KAAK,IAAI,EAAE,aAAa,cAAc,CAAC,GAAG;GACxF,SAAS,KAAK,SAAS,SAAS,qBAAqB,KAAK,GAAG,GAAG;GAChE,WACE,KAAK,SAAS,SAAS,qBAAqB,KAAK,IAAI,EAAE,SAAS,eAAe,CAAC,GAAG;GACtF;EACD,cAAc;EACf;;;;;AAMH,SAAgB,iBAAiB,MAAkD;AACjF,QAAO,KAAK,SAAS;;;;;AAMvB,SAAgB,mBAAmB,MAAkD;AACnF,QAAO,KAAK,SAAS;;;;;AAMvB,SAAgB,qBAAqB,IAAY,UAA0C,EAAE,EAAE;CAC7F,MAAM,eAAe,IAAI,iBAAiB;AAC1C,KAAI,SAAS,QAAS,cAAa,IAAI,WAAW,QAAQ,QAAQ;AAClE,KAAI,SAAS,YAAa,cAAa,IAAI,eAAe,QAAQ,YAAY;CAE9E,MAAM,cAAc,aAAa,UAAU;AAC3C,QAAO,oBAAoB,KAAK,cAAc,IAAI,gBAAgB;;;;;AAMpE,SAAgB,sBAAsB,EAAE,KAAK,SAA2B;CACtE,MAAM,MAAM,IAAI,IAAI,KAAK,OAAO,SAAS,OAAO;AAChD,KAAI,aAAa,IAAI,WAAW,WAAW,QAAQ;AACnD,QAAO,IAAI,UAAU;;AAQvB,SAAgB,2BAA2B,EACzC,MACA,eAC+E;AAC/E,KAAI,aAAa,WAAW,SAAS,CAAE,QAAO;AAC9C,KAAI,gBAAgB,kBAAmB,QAAO;AAC9C,KAAI,aAAa,SAAS,cAAc,CAAE,QAAO;AACjD,KAAI,aAAa,WAAW,SAAS,CAAE,QAAO;AAC9C,KAAI,aAAa,WAAW,SAAS,CAAE,QAAO;AAC9C,KAAI,aAAa,SAAS,MAAM,IAAI,aAAa,SAAS,UAAU,CAAE,QAAO;CAE7E,MAAM,MAAM,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa;AACjD,KAAI;EAAC;EAAO;EAAQ;EAAO;EAAO;EAAO;EAAO,CAAC,SAAS,OAAO,GAAG,CAAE,QAAO;AAC7E,KAAI;EAAC;EAAO;EAAO;EAAQ;EAAM,CAAC,SAAS,OAAO,GAAG,CAAE,QAAO;AAC9D,KAAI;EAAC;EAAO;EAAQ;EAAM,CAAC,SAAS,OAAO,GAAG,CAAE,QAAO;AACvD,KAAI;EAAC;EAAO;EAAO;EAAK,CAAC,SAAS,OAAO,GAAG,CAAE,QAAO;AAErD,QAAO;;;;;AAMT,SAAgB,YAAY,OAAe;CACzC,MAAM,QAAQ;EAAC;EAAK;EAAM;EAAM;EAAM;EAAM;EAAK;CAEjD,IAAI,OAAO;CACX,IAAI,YAAY;AAEhB,QAAO,QAAQ,QAAQ,YAAY,MAAM,SAAS,GAAG;AACnD,UAAQ;AACR;;AAGF,QAAO,GAAG,KAAK,QAAQ,EAAE,GAAG,MAAM"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LocalDrive } from "./service.server.mjs";
|
|
2
|
+
import { TDatabaseSchema, TulipContext } from "@tulip-systems/core/config";
|
|
3
|
+
import { NextRequest } from "next/server";
|
|
4
|
+
|
|
5
|
+
//#region src/providers/local/lib/route-handler.server.d.ts
|
|
6
|
+
type RouteCtx = {
|
|
7
|
+
params: Promise<{
|
|
8
|
+
rest?: string[];
|
|
9
|
+
}>;
|
|
10
|
+
};
|
|
11
|
+
type CreateLocalDriveRouteHandlerProps<TSchema extends TDatabaseSchema> = Pick<TulipContext<TSchema>, "auth"> & {
|
|
12
|
+
drive: LocalDrive<TSchema>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Creates a catch-all drive route handler for `/api/drive/[[...rest]]`.
|
|
16
|
+
*
|
|
17
|
+
* Current support:
|
|
18
|
+
* - `GET /api/drive/files/:id?variant=:variant&disposition=:disposition`
|
|
19
|
+
* resolves a drive node, checks access for private local assets, and redirects
|
|
20
|
+
* to a short-lived file URL for the requested node variant.
|
|
21
|
+
*
|
|
22
|
+
* @param props - Route handler dependencies.
|
|
23
|
+
* @returns Next.js route handlers for GET, POST, PUT, PATCH, and DELETE.
|
|
24
|
+
*/
|
|
25
|
+
declare function createLocalDriveRouteHandler<TSchema extends TDatabaseSchema>(context: CreateLocalDriveRouteHandlerProps<TSchema>): {
|
|
26
|
+
GET: (request: NextRequest, ctx: RouteCtx) => Promise<Response>;
|
|
27
|
+
POST: () => Promise<Response>;
|
|
28
|
+
PUT: () => Promise<Response>;
|
|
29
|
+
PATCH: () => Promise<Response>;
|
|
30
|
+
DELETE: () => Promise<Response>;
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { createLocalDriveRouteHandler };
|
|
34
|
+
//# sourceMappingURL=route-handler.server.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-handler.server.d.mts","names":[],"sources":["../../../../src/providers/local/lib/route-handler.server.ts"],"mappings":";;;;;KAQK,QAAA;EACH,MAAA,EAAQ,OAAA;IAAU,IAAA;EAAA;AAAA;AAAA,KAGf,iCAAA,iBAAkD,eAAA,IAAmB,IAAA,CACxE,YAAA,CAAa,OAAA;EAGb,KAAA,EAAO,UAAA,CAAW,OAAA;AAAA;;;;AAPI;;;;;;;;iBAqBR,4BAAA,iBAA6C,eAAA,CAAA,CAC3D,OAAA,EAAS,iCAAA,CAAkC,OAAA;iBAQf,WAAA,EAAW,GAAA,EAAO,QAAA,KAAQ,OAAA,CAAA,QAAA"}
|