refactor: types correct (#1056)
Reviewed-on: daoyoucloud/tachybase#1056
This commit is contained in:
parent
42f7a69c82
commit
260a95cac2
@ -13,6 +13,7 @@
|
||||
"minimatch": "^5.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/lodash": "4.17.0"
|
||||
"@types/lodash": "4.17.0",
|
||||
"@types/node": "^20.12.12"
|
||||
}
|
||||
}
|
||||
|
6
packages/core/acl/tsconfig.json
Normal file
6
packages/core/acl/tsconfig.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": "../../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"typeRoots": ["./node_modules/@types"]
|
||||
}
|
||||
}
|
@ -20,7 +20,7 @@
|
||||
"@hapi/topo": "^6.0.0",
|
||||
"@pnpm/find-workspace-dir": "^6.0.3",
|
||||
"@pnpm/workspace.find-packages": "^1.1.12",
|
||||
"@types/gulp": "^4.0.13",
|
||||
"@types/fs-extra": "11.0.4",
|
||||
"@types/tar": "^6.1.5",
|
||||
"@vercel/ncc": "0.36.1",
|
||||
"@vitejs/plugin-react": "^4.0.0",
|
||||
@ -29,8 +29,6 @@
|
||||
"execa": "^5.1.1",
|
||||
"fast-glob": "^3.3.1",
|
||||
"fs-extra": "^11.1.1",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-typescript": "6.0.0-alpha.1",
|
||||
"sass": "^1.75.0",
|
||||
"tar": "^6.2.0",
|
||||
"tsup": "7.2.0",
|
||||
|
@ -1,29 +1,46 @@
|
||||
import execa from 'execa';
|
||||
import chalk from 'chalk';
|
||||
import { EventEmitter } from 'events';
|
||||
import path from 'path';
|
||||
import {
|
||||
PACKAGES_PATH,
|
||||
getPluginPackages,
|
||||
CORE_CLIENT,
|
||||
CORE_APP,
|
||||
getCjsPackages,
|
||||
getPresetsPackages,
|
||||
ROOT_PATH,
|
||||
ESM_PACKAGES,
|
||||
} from './constant';
|
||||
import { buildClient } from './buildClient';
|
||||
import { buildCjs } from './buildCjs';
|
||||
import { buildPlugin } from './buildPlugin';
|
||||
import { buildDeclaration } from './buildDeclaration';
|
||||
import { PkgLog, getPkgLog, toUnixPath, getPackageJson, getUserConfig, UserConfig, writeToCache, readFromCache } from './utils';
|
||||
import { getPackages } from './utils/getPackages';
|
||||
|
||||
import type { Project } from '@pnpm/workspace.find-packages';
|
||||
import { tarPlugin } from './tarPlugin'
|
||||
import chalk from 'chalk';
|
||||
import execa from 'execa';
|
||||
|
||||
import { buildCjs } from './buildCjs';
|
||||
import { buildClient } from './buildClient';
|
||||
import { buildDeclaration } from './buildDeclaration';
|
||||
import { buildEsm } from './buildEsm';
|
||||
import { buildPlugin } from './buildPlugin';
|
||||
import {
|
||||
CORE_APP,
|
||||
CORE_CLIENT,
|
||||
ESM_PACKAGES,
|
||||
getCjsPackages,
|
||||
getPluginPackages,
|
||||
getPresetsPackages,
|
||||
PACKAGES_PATH,
|
||||
ROOT_PATH,
|
||||
} from './constant';
|
||||
import { tarPlugin } from './tarPlugin';
|
||||
import {
|
||||
getPackageJson,
|
||||
getPkgLog,
|
||||
getUserConfig,
|
||||
PkgLog,
|
||||
readFromCache,
|
||||
toUnixPath,
|
||||
UserConfig,
|
||||
writeToCache,
|
||||
} from './utils';
|
||||
import { getPackages } from './utils/getPackages';
|
||||
|
||||
const BUILD_ERROR = 'build-error';
|
||||
global.__bus = new EventEmitter();
|
||||
|
||||
export async function build(pkgs: string[]) {
|
||||
const messages = [];
|
||||
(global.__bus as EventEmitter).on('build:errors', (message) => {
|
||||
messages.push(message);
|
||||
});
|
||||
const isDev = process.argv.includes('--development');
|
||||
process.env.NODE_ENV = isDev ? 'development' : 'production';
|
||||
|
||||
@ -35,9 +52,9 @@ export async function build(pkgs: string[]) {
|
||||
if (packages.length === 0) {
|
||||
let msg = '';
|
||||
if (pkgs.length) {
|
||||
msg = `'${pkgs.join(', ')}' did not match any packages`
|
||||
msg = `'${pkgs.join(', ')}' did not match any packages`;
|
||||
} else {
|
||||
msg = 'No package matched'
|
||||
msg = 'No package matched';
|
||||
}
|
||||
console.warn(chalk.yellow(`[@tachybase/build]: ${msg}`));
|
||||
return;
|
||||
@ -53,7 +70,7 @@ export async function build(pkgs: string[]) {
|
||||
if (clientCore) {
|
||||
await buildPackage(clientCore, 'es', buildClient);
|
||||
}
|
||||
const esmPackages = cjsPackages.filter(pkg => ESM_PACKAGES.includes(pkg.manifest.name));
|
||||
const esmPackages = cjsPackages.filter((pkg) => ESM_PACKAGES.includes(pkg.manifest.name));
|
||||
await buildPackages(esmPackages, 'es', buildEsm);
|
||||
|
||||
// plugins/*、samples/*
|
||||
@ -70,6 +87,16 @@ export async function build(pkgs: string[]) {
|
||||
});
|
||||
}
|
||||
writeToCache(BUILD_ERROR, {});
|
||||
if (messages.length > 0) {
|
||||
console.log('❌ build errors:');
|
||||
messages.forEach((message) => {
|
||||
console.log('🐛 ', message);
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
throw new Error('build error.');
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
|
||||
export async function buildPackages(
|
||||
@ -78,7 +105,7 @@ export async function buildPackages(
|
||||
doBuildPackage: (cwd: string, userConfig: UserConfig, sourcemap: boolean, log?: PkgLog) => Promise<any>,
|
||||
) {
|
||||
for await (const pkg of packages) {
|
||||
writeToCache(BUILD_ERROR, { pkg: pkg.manifest.name})
|
||||
writeToCache(BUILD_ERROR, { pkg: pkg.manifest.name });
|
||||
await buildPackage(pkg, targetDir, doBuildPackage);
|
||||
}
|
||||
}
|
||||
|
@ -1,35 +1,66 @@
|
||||
import gulp from 'gulp';
|
||||
import gulpTs from 'gulp-typescript';
|
||||
import type { EventEmitter } from 'events';
|
||||
import path from 'path';
|
||||
import { ROOT_PATH } from './constant';
|
||||
|
||||
import fg from 'fast-glob';
|
||||
import fs from 'fs-extra';
|
||||
import ts from 'typescript';
|
||||
|
||||
import { globExcludeFiles, ROOT_PATH } from './constant';
|
||||
|
||||
export const buildDeclaration = (cwd: string, targetDir: string) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const srcPath = path.join(cwd, 'src');
|
||||
const targetPath = path.join(cwd, targetDir);
|
||||
return new Promise<{ exitCode: 1 | 0; messages: string[] }>((resolve, reject) => {
|
||||
const localTsConfigPath = path.join(cwd, 'tsconfig.json');
|
||||
|
||||
const tsConfig = gulpTs.createProject(path.join(ROOT_PATH, 'tsconfig.json'));
|
||||
delete tsConfig.config.compilerOptions.paths;
|
||||
const patterns = [
|
||||
path.join(srcPath, '**/*.{ts,tsx}'),
|
||||
`!${path.join(srcPath, '**/fixtures{,/**}')}`,
|
||||
`!${path.join(srcPath, '**/demos{,/**}')}`,
|
||||
`!${path.join(srcPath, '**/__test__{,/**}')}`,
|
||||
`!${path.join(srcPath, '**/__tests__{,/**}')}`,
|
||||
`!${path.join(srcPath, '**/__e2e__{,/**}')}`,
|
||||
`!${path.join(srcPath, '**/*.mdx')}`,
|
||||
`!${path.join(srcPath, '**/*.md')}`,
|
||||
`!${path.join(srcPath, '**/*.+(test|e2e|spec).+(js|jsx|ts|tsx)')}`,
|
||||
`!${path.join(srcPath, '**/tsconfig{,.*}.json')}`,
|
||||
`!${path.join(srcPath, '.umi{,-production,-test}{,/**}')}`,
|
||||
];
|
||||
gulp
|
||||
.src(patterns, { base: srcPath, allowEmpty: true })
|
||||
.pipe(gulpTs(tsConfig.config.compilerOptions))
|
||||
.on('error', () => {
|
||||
console.log('errors in build declareation.');
|
||||
})
|
||||
.dts.pipe(gulp.dest(targetPath))
|
||||
.on('end', resolve);
|
||||
// 读取 tsconfig.json 文件路径
|
||||
const configPath = fs.existsSync(localTsConfigPath) ? localTsConfigPath : path.join(ROOT_PATH, 'tsconfig.json');
|
||||
|
||||
// 读取并解析 tsconfig.json
|
||||
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
||||
|
||||
if (configFile.error) {
|
||||
const message = ts.flattenDiagnosticMessageText(configFile.error.messageText, '\n');
|
||||
return reject(`Error reading tsconfig.json: ${message}`);
|
||||
}
|
||||
|
||||
// 解析 tsconfig.json 配置
|
||||
const parsedCommandLine = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configPath));
|
||||
parsedCommandLine.options.paths = {};
|
||||
|
||||
// 更新编译选项,设置输出目录为 lib,启用声明文件生成
|
||||
parsedCommandLine.options.outDir = path.join(cwd, targetDir);
|
||||
parsedCommandLine.options.declaration = true;
|
||||
parsedCommandLine.options.emitDeclarationOnly = true;
|
||||
|
||||
parsedCommandLine.fileNames = fg.globSync(['src/**/*.{ts,tsx}', ...globExcludeFiles], { cwd, absolute: true });
|
||||
parsedCommandLine.options.rootDir = path.join(cwd, 'src');
|
||||
|
||||
// 编译
|
||||
const program = ts.createProgram(parsedCommandLine.fileNames, parsedCommandLine.options);
|
||||
const emitResult = program.emit();
|
||||
|
||||
// 处理编译错误
|
||||
const allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics);
|
||||
const messages = [];
|
||||
allDiagnostics.forEach((diagnostic) => {
|
||||
try {
|
||||
if (diagnostic.file) {
|
||||
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
|
||||
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
||||
(global.__bus as EventEmitter).emit(
|
||||
'build:errors',
|
||||
`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`,
|
||||
);
|
||||
console.error(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
|
||||
} else {
|
||||
(global.__bus as EventEmitter).emit('build:errors', ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'));
|
||||
console.error(ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'));
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
|
||||
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
||||
resolve({ exitCode, messages });
|
||||
});
|
||||
};
|
||||
|
17
packages/core/cache/src/cache-manager.ts
vendored
17
packages/core/cache/src/cache-manager.ts
vendored
@ -1,13 +1,16 @@
|
||||
import { FactoryStore, Store, caching, Cache as BasicCache } from 'cache-manager';
|
||||
import { Cache } from './cache';
|
||||
import lodash from 'lodash';
|
||||
import { Cache as BasicCache, caching, FactoryStore, Store } from 'cache-manager';
|
||||
import { RedisStore, redisStore } from 'cache-manager-redis-yet';
|
||||
import deepmerge from 'deepmerge';
|
||||
import { MemoryBloomFilter } from './bloom-filter/memory-bloom-filter';
|
||||
import { BloomFilter } from './bloom-filter';
|
||||
import { RedisBloomFilter } from './bloom-filter/redis-bloom-filter';
|
||||
import lodash from 'lodash';
|
||||
|
||||
type StoreOptions = {
|
||||
import { BloomFilter } from './bloom-filter';
|
||||
import { MemoryBloomFilter } from './bloom-filter/memory-bloom-filter';
|
||||
import { RedisBloomFilter } from './bloom-filter/redis-bloom-filter';
|
||||
import { Cache } from './cache';
|
||||
|
||||
export type { FactoryStore } from 'cache-manager';
|
||||
|
||||
export type StoreOptions = {
|
||||
store?: 'memory' | FactoryStore<Store, any>;
|
||||
close?: (store: Store) => Promise<void>;
|
||||
// global config
|
||||
|
@ -13,9 +13,9 @@
|
||||
"@antv/g2plot": "^2.4.18",
|
||||
"@ctrl/tinycolor": "^3.6.0",
|
||||
"@dnd-kit/accessibility": "^3.1.0",
|
||||
"@dnd-kit/core": "^5.0.1",
|
||||
"@dnd-kit/modifiers": "^6.0.0",
|
||||
"@dnd-kit/sortable": "^6.0.0",
|
||||
"@dnd-kit/core": "^6.1.0",
|
||||
"@dnd-kit/modifiers": "^7.0.0",
|
||||
"@dnd-kit/sortable": "^8.0.0",
|
||||
"@dnd-kit/utilities": "^3.2.2",
|
||||
"@emotion/css": "^11.7.1",
|
||||
"@tachybase/components": "workspace:*",
|
||||
|
@ -1,13 +1,15 @@
|
||||
import { Checkbox, message, Table } from 'antd';
|
||||
import React, { createContext, useContext, useMemo, useState } from 'react';
|
||||
|
||||
import { Checkbox, message, Table } from 'antd';
|
||||
import { omit } from 'lodash';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { useAPIClient, useRequest } from '../../api-client';
|
||||
import { useApp } from '../../application';
|
||||
import { SettingsCenterContext } from '../../pm';
|
||||
import { useRecord } from '../../record-provider';
|
||||
import { useStyles } from '../style';
|
||||
import { useApp } from '../../application';
|
||||
import { useCompile } from '../../schema-component';
|
||||
import { omit } from 'lodash';
|
||||
import { useStyles } from '../style';
|
||||
|
||||
const getParentKeys = (tree, func, path = []) => {
|
||||
if (!tree) return [];
|
||||
@ -87,7 +89,7 @@ export const SettingsCenterConfigure = () => {
|
||||
message.success(t('Saved successfully'));
|
||||
};
|
||||
return (
|
||||
<Table
|
||||
<Table<any>
|
||||
className={styles}
|
||||
loading={loading}
|
||||
rowKey={'key'}
|
||||
|
@ -1,7 +1,9 @@
|
||||
import React, { useState } from 'react';
|
||||
|
||||
import { Checkbox, message, Table } from 'antd';
|
||||
import { uniq } from 'lodash';
|
||||
import React, { useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { useAPIClient, useRequest } from '../../api-client';
|
||||
import { useRecord } from '../../record-provider';
|
||||
import { useStyles } from '../style';
|
||||
@ -105,7 +107,7 @@ export const MenuConfigure = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<Table
|
||||
<Table<any>
|
||||
className={styles}
|
||||
loading={loading}
|
||||
rowKey={'uid'}
|
||||
|
@ -1,5 +1,7 @@
|
||||
import { Spin } from 'antd';
|
||||
import React, { createContext, useContext } from 'react';
|
||||
|
||||
import { Spin } from 'antd';
|
||||
|
||||
import { useRequest } from '../../api-client';
|
||||
import { SchemaComponent, SchemaComponentContext } from '../../schema-component';
|
||||
import { MenuItemsProvider } from '../Configuration/MenuItemsProvider';
|
||||
@ -9,7 +11,7 @@ import { roleSchema } from './schemas/roles';
|
||||
const AvailableActionsContext = createContext([]);
|
||||
AvailableActionsContext.displayName = 'AvailableActionsContext';
|
||||
|
||||
const AvailableActionsProver: React.FC = (props) => {
|
||||
const AvailableActionsProver = (props) => {
|
||||
const { data, loading } = useRequest<{
|
||||
data: any[];
|
||||
}>({
|
||||
|
@ -1,10 +1,11 @@
|
||||
import React, { createContext } from 'react';
|
||||
import { FormItem, FormLayout } from '@tachybase/components';
|
||||
import { ArrayField } from '@tachybase/schema';
|
||||
import { connect, useField, useForm } from '@tachybase/schema';
|
||||
import { ArrayField, connect, useField, useForm } from '@tachybase/schema';
|
||||
|
||||
import { Checkbox, Table, Tag } from 'antd';
|
||||
import { isEmpty } from 'lodash';
|
||||
import React, { createContext } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { useCollectionManager_deprecated, useCompile, useRecord } from '../..';
|
||||
import { useStyles } from '../style';
|
||||
import { useAvailableActions } from './RoleTable';
|
||||
@ -93,7 +94,7 @@ export const RolesResourcesActions = connect((props) => {
|
||||
<RoleResourceCollectionContext.Provider value={collection}>
|
||||
<FormLayout layout={'vertical'}>
|
||||
<FormItem label={t('Action permission')}>
|
||||
<Table
|
||||
<Table<any>
|
||||
className={styles}
|
||||
size={'small'}
|
||||
pagination={false}
|
||||
@ -157,7 +158,7 @@ export const RolesResourcesActions = connect((props) => {
|
||||
/>
|
||||
</FormItem>
|
||||
<FormItem label={t('Field permission')}>
|
||||
<Table
|
||||
<Table<any>
|
||||
className={styles}
|
||||
pagination={false}
|
||||
dataSource={fieldPermissions}
|
||||
|
@ -1,12 +1,13 @@
|
||||
import { createForm } from '@tachybase/schema';
|
||||
import React, { createContext, useContext, useMemo, useState } from 'react';
|
||||
import { createForm } from '@tachybase/schema';
|
||||
|
||||
import { FormProvider, SchemaComponent } from '../../schema-component';
|
||||
import { scopesSchema } from './schemas/scopes';
|
||||
|
||||
const RolesResourcesScopesSelectedRowKeysContext = createContext(null);
|
||||
RolesResourcesScopesSelectedRowKeysContext.displayName = 'RolesResourcesScopesSelectedRowKeysContext';
|
||||
|
||||
const RolesResourcesScopesSelectedRowKeysProvider: React.FC = (props) => {
|
||||
const RolesResourcesScopesSelectedRowKeysProvider = (props) => {
|
||||
const [keys, setKeys] = useState([]);
|
||||
return (
|
||||
<RolesResourcesScopesSelectedRowKeysContext.Provider value={[keys, setKeys]}>
|
||||
|
@ -1,8 +1,9 @@
|
||||
import { ArrayField } from '@tachybase/schema';
|
||||
import { connect, useField } from '@tachybase/schema';
|
||||
import { Checkbox, Select, Table, Tag } from 'antd';
|
||||
import React from 'react';
|
||||
import { ArrayField, connect, useField } from '@tachybase/schema';
|
||||
|
||||
import { Checkbox, Select, Table, Tag } from 'antd';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { useCompile } from '../..';
|
||||
import { useAvailableActions } from './RoleTable';
|
||||
|
||||
@ -42,7 +43,7 @@ export const StrategyActions = connect((props) => {
|
||||
const scopes = toScopes(field.value);
|
||||
return (
|
||||
<div>
|
||||
<Table
|
||||
<Table<any>
|
||||
size={'small'}
|
||||
pagination={false}
|
||||
columns={[
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { get, set } from 'lodash';
|
||||
import React, { ComponentType } from 'react';
|
||||
|
||||
import { get, set } from 'lodash';
|
||||
import {
|
||||
BrowserRouter,
|
||||
BrowserRouterProps,
|
||||
@ -10,6 +11,7 @@ import {
|
||||
RouteObject,
|
||||
useRoutes,
|
||||
} from 'react-router-dom';
|
||||
|
||||
import { Application } from './Application';
|
||||
import { BlankComponent, RouterContextCleaner } from './components';
|
||||
|
||||
@ -128,7 +130,12 @@ export class RouterManager {
|
||||
return element;
|
||||
};
|
||||
|
||||
const RenderRouter: React.FC<{ BaseLayout?: ComponentType }> = ({ BaseLayout = BlankComponent }) => {
|
||||
const RenderRouter = ({
|
||||
BaseLayout = BlankComponent,
|
||||
}: {
|
||||
BaseLayout?: ComponentType<any>;
|
||||
children?: React.ReactNode;
|
||||
}) => {
|
||||
return (
|
||||
<RouterContextCleaner>
|
||||
<ReactRouter {...opts}>
|
||||
|
@ -1,3 +1,3 @@
|
||||
import React, { FC, ReactNode } from 'react';
|
||||
import React, { ReactNode } from 'react';
|
||||
|
||||
export const BlankComponent: FC<{ children?: ReactNode }> = ({ children }) => <>{children}</>;
|
||||
export const BlankComponent = ({ children }: { children?: ReactNode }) => <>{children}</>;
|
||||
|
@ -1,4 +1,5 @@
|
||||
import React, { useMemo } from 'react';
|
||||
|
||||
import { useApp } from '../hooks';
|
||||
|
||||
export const MainComponent = React.memo(() => {
|
||||
|
@ -56,7 +56,7 @@ export const useSchemaInitializerSubMenuContext = () => {
|
||||
return React.useContext(SchemaInitializerSubMenuContext);
|
||||
};
|
||||
|
||||
export const SchemaInitializerMenu: FC<MenuProps> = (props) => {
|
||||
export const SchemaInitializerMenu = (props: MenuProps) => {
|
||||
const { componentCls, hashId } = useSchemaInitializerStyles();
|
||||
const { items, ...others } = props;
|
||||
const { token } = theme.useToken();
|
||||
|
@ -1,4 +1,5 @@
|
||||
import React, { ComponentType, FC } from 'react';
|
||||
|
||||
import { BlankComponent } from '../components';
|
||||
|
||||
export function normalizeContainer(container: Element | ShadowRoot | string): Element | null {
|
||||
@ -21,9 +22,9 @@ export function normalizeContainer(container: Element | ShadowRoot | string): El
|
||||
}
|
||||
|
||||
export const compose = (...components: [ComponentType, any][]) => {
|
||||
const Component = components.reduce<ComponentType>((Parent, child) => {
|
||||
const Component = components.reduce<ComponentType<any>>((Parent, child) => {
|
||||
const [Child, childProps] = child;
|
||||
const ComposeComponent: FC = ({ children }) => (
|
||||
const ComposeComponent = ({ children }) => (
|
||||
<Parent>
|
||||
<Child {...childProps}>{children}</Child>
|
||||
</Parent>
|
||||
|
@ -1,5 +1,7 @@
|
||||
import { Result } from 'ahooks/es/useRequest/src/types';
|
||||
import React, { createContext, useContext } from 'react';
|
||||
|
||||
import { Result } from 'ahooks/es/useRequest/src/types';
|
||||
|
||||
import { useRequest } from '../api-client';
|
||||
|
||||
export const AsyncDataContext = createContext<Result<any, any> & { state?: any; setState?: any }>(null);
|
||||
@ -10,9 +12,10 @@ export interface AsyncDataProviderProps {
|
||||
request?: any;
|
||||
uid?: string;
|
||||
onSuccess?: (data, params) => void;
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export const AsyncDataProvider: React.FC<AsyncDataProviderProps> = (props) => {
|
||||
export const AsyncDataProvider = (props: AsyncDataProviderProps) => {
|
||||
const { value, request, children, ...others } = props;
|
||||
const result = useRequest(request, { ...others });
|
||||
if (value) {
|
||||
|
@ -1,39 +1,40 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Plugin } from '../application/Plugin';
|
||||
import { ActionSchemaToolbar } from '../modules/actions/ActionSchemaToolbar';
|
||||
import { BlockSchemaToolbar } from '../modules/blocks/BlockSchemaToolbar';
|
||||
import { useDetailsWithPaginationDecoratorProps } from '../modules/blocks/data-blocks/details-multi/hooks/useDetailsWithPaginationDecoratorProps';
|
||||
import { useDetailsWithPaginationProps } from '../modules/blocks/data-blocks/details-multi/hooks/useDetailsWithPaginationProps';
|
||||
import { useDetailsDecoratorProps } from '../modules/blocks/data-blocks/details-single/hooks/useDetailsDecoratorProps';
|
||||
import { useDetailsProps } from '../modules/blocks/data-blocks/details-single/hooks/useDetailsProps';
|
||||
import { FormItemSchemaToolbar } from '../modules/blocks/data-blocks/form/FormItemSchemaToolbar';
|
||||
import { useCreateFormBlockDecoratorProps } from '../modules/blocks/data-blocks/form/hooks/useCreateFormBlockDecoratorProps';
|
||||
import { useCreateFormBlockProps } from '../modules/blocks/data-blocks/form/hooks/useCreateFormBlockProps';
|
||||
import { useEditFormBlockDecoratorProps } from '../modules/blocks/data-blocks/form/hooks/useEditFormBlockDecoratorProps';
|
||||
import { useEditFormBlockProps } from '../modules/blocks/data-blocks/form/hooks/useEditFormBlockProps';
|
||||
import { useGridCardBlockDecoratorProps } from '../modules/blocks/data-blocks/grid-card/hooks/useGridCardBlockDecoratorProps';
|
||||
import { useListBlockDecoratorProps } from '../modules/blocks/data-blocks/list/hooks/useListBlockDecoratorProps';
|
||||
import { useTableSelectorDecoratorProps } from '../modules/blocks/data-blocks/table-selector/hooks/useTableSelectorDecoratorProps';
|
||||
import { useTableBlockDecoratorProps } from '../modules/blocks/data-blocks/table/hooks/useTableBlockDecoratorProps';
|
||||
import { useTableBlockProps } from '../modules/blocks/data-blocks/table/hooks/useTableBlockProps';
|
||||
import { TableColumnSchemaToolbar } from '../modules/blocks/data-blocks/table/TableColumnSchemaToolbar';
|
||||
import { CollapseItemSchemaToolbar } from '../modules/blocks/filter-blocks/collapse/CollapseItemSchemaToolbar';
|
||||
import { useCollapseBlockDecoratorProps } from '../modules/blocks/filter-blocks/collapse/hooks/useCollapseBlockDecoratorProps';
|
||||
import { useFilterFormBlockDecoratorProps } from '../modules/blocks/filter-blocks/form/hooks/useFilterFormBlockDecoratorProps';
|
||||
import { useFilterFormBlockProps } from '../modules/blocks/filter-blocks/form/hooks/useFilterFormBlockProps';
|
||||
import { SchemaComponentOptions } from '../schema-component';
|
||||
import { RecordLink, useParamsFromRecord, useSourceIdFromParentRecord, useSourceIdFromRecord } from './BlockProvider';
|
||||
import { DetailsBlockProvider, useDetailsBlockProps } from './DetailsBlockProvider';
|
||||
import { FilterFormBlockProvider } from './FilterFormBlockProvider';
|
||||
import { FormBlockProvider, useFormBlockProps } from './FormBlockProvider';
|
||||
import { FormFieldProvider, useFormFieldProps } from './FormFieldProvider';
|
||||
import * as bp from './hooks';
|
||||
import { TableBlockProvider } from './TableBlockProvider';
|
||||
import { useTableBlockProps } from '../modules/blocks/data-blocks/table/hooks/useTableBlockProps';
|
||||
import { TableFieldProvider, useTableFieldProps } from './TableFieldProvider';
|
||||
import { TableSelectorProvider, useTableSelectorProps } from './TableSelectorProvider';
|
||||
import * as bp from './hooks';
|
||||
import { useTableBlockDecoratorProps } from '../modules/blocks/data-blocks/table/hooks/useTableBlockDecoratorProps';
|
||||
import { useListBlockDecoratorProps } from '../modules/blocks/data-blocks/list/hooks/useListBlockDecoratorProps';
|
||||
import { useTableSelectorDecoratorProps } from '../modules/blocks/data-blocks/table-selector/hooks/useTableSelectorDecoratorProps';
|
||||
import { useCollapseBlockDecoratorProps } from '../modules/blocks/filter-blocks/collapse/hooks/useCollapseBlockDecoratorProps';
|
||||
import { useFilterFormBlockProps } from '../modules/blocks/filter-blocks/form/hooks/useFilterFormBlockProps';
|
||||
import { useFilterFormBlockDecoratorProps } from '../modules/blocks/filter-blocks/form/hooks/useFilterFormBlockDecoratorProps';
|
||||
import { useGridCardBlockDecoratorProps } from '../modules/blocks/data-blocks/grid-card/hooks/useGridCardBlockDecoratorProps';
|
||||
import { useDetailsProps } from '../modules/blocks/data-blocks/details-single/hooks/useDetailsProps';
|
||||
import { useDetailsWithPaginationProps } from '../modules/blocks/data-blocks/details-multi/hooks/useDetailsWithPaginationProps';
|
||||
import { useDetailsDecoratorProps } from '../modules/blocks/data-blocks/details-single/hooks/useDetailsDecoratorProps';
|
||||
import { useDetailsWithPaginationDecoratorProps } from '../modules/blocks/data-blocks/details-multi/hooks/useDetailsWithPaginationDecoratorProps';
|
||||
|
||||
// TODO: delete this, replaced by `BlockSchemaComponentPlugin`
|
||||
export const BlockSchemaComponentProvider: React.FC = (props) => {
|
||||
export const BlockSchemaComponentProvider = (props) => {
|
||||
return (
|
||||
<SchemaComponentOptions
|
||||
components={{
|
||||
|
@ -1,5 +1,7 @@
|
||||
import React, { createContext, useContext, useEffect } from 'react';
|
||||
|
||||
import { useLocation } from 'react-router-dom';
|
||||
|
||||
import { useAPIClient, useRequest } from '../api-client';
|
||||
import { useAppSpin } from '../application/hooks/useAppSpin';
|
||||
|
||||
@ -14,7 +16,7 @@ const CollectionHistoryContext = createContext<CollectionHistoryContextValue>({
|
||||
});
|
||||
CollectionHistoryContext.displayName = 'CollectionHistoryContext';
|
||||
|
||||
export const CollectionHistoryProvider: React.FC = (props) => {
|
||||
export const CollectionHistoryProvider = (props) => {
|
||||
const api = useAPIClient();
|
||||
|
||||
const options = {
|
||||
|
@ -1,10 +1,11 @@
|
||||
import React from 'react';
|
||||
import { SchemaComponentOptions } from '..';
|
||||
|
||||
import { CollectionProvider_deprecated, ResourceActionProvider, useDataSourceFromRAC } from '.';
|
||||
import { SchemaComponentOptions } from '..';
|
||||
import * as hooks from './action-hooks';
|
||||
import { DataSourceProvider_deprecated, ds, SubFieldDataSourceProvider_deprecated } from './sub-table';
|
||||
|
||||
export const CollectionManagerSchemaComponentProvider: React.FC = (props) => {
|
||||
export const CollectionManagerSchemaComponentProvider = (props) => {
|
||||
return (
|
||||
<SchemaComponentOptions
|
||||
scope={{ cm: { ...hooks, useDataSourceFromRAC }, ds }}
|
||||
|
@ -1,12 +1,11 @@
|
||||
import { useAPIClient, useRequest } from '../../../../api-client';
|
||||
import { AsyncDataProvider } from '../../../../async-data-provider';
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import { useForm } from '@tachybase/schema';
|
||||
|
||||
import { useAPIClient, useRequest } from '../../../../api-client';
|
||||
import { AsyncDataProvider } from '../../../../async-data-provider';
|
||||
import { useRecord } from '../../../../record-provider';
|
||||
|
||||
export const SQLRequestProvider: React.FC<{
|
||||
manual?: boolean;
|
||||
}> = (props) => {
|
||||
export const SQLRequestProvider = (props: { manual?: boolean; children: React.ReactNode }) => {
|
||||
const api = useAPIClient();
|
||||
const form = useForm();
|
||||
const record = useRecord();
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { getOptions } from '@tachybase/evaluators/client';
|
||||
import { getConfigurableProperties } from './properties';
|
||||
|
||||
import { CollectionTemplate } from '../../data-source/collection-template/CollectionTemplate';
|
||||
import { getConfigurableProperties } from './properties';
|
||||
|
||||
export class ExpressionCollectionTemplate extends CollectionTemplate {
|
||||
name = 'expression';
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { createContext, FC, ReactNode, useContext, useMemo } from 'react';
|
||||
import React, { createContext, ReactNode, useContext, useMemo } from 'react';
|
||||
|
||||
import { ACLCollectionProvider } from '../../acl/ACLProvider';
|
||||
import { UseRequestOptions, UseRequestService } from '../../api-client';
|
||||
@ -134,8 +134,8 @@ export const AssociationOrCollectionProvider = (props: {
|
||||
);
|
||||
};
|
||||
|
||||
export const DataBlockProvider: FC<DataBlockProviderProps & { children?: ReactNode }> = withDynamicSchemaProps(
|
||||
(props) => {
|
||||
export const DataBlockProvider = withDynamicSchemaProps(
|
||||
(props: DataBlockProviderProps & { children?: ReactNode }) => {
|
||||
const { collection, association, dataSource, children, layoutDirection, ...resets } =
|
||||
props as Partial<AllDataBlockProps>;
|
||||
const configSetting = {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { createContext, FC, useContext, useMemo } from 'react';
|
||||
import React, { createContext, useContext, useMemo } from 'react';
|
||||
|
||||
import { useDeepCompareEffect, useUpdateEffect } from 'ahooks';
|
||||
|
||||
@ -77,7 +77,7 @@ function useParentRequest<T>(options: Omit<AllDataBlockProps, 'type'>) {
|
||||
);
|
||||
}
|
||||
|
||||
export const BlockRequestProvider: FC = ({ children }) => {
|
||||
export const BlockRequestProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
const props = useDataBlockProps();
|
||||
const {
|
||||
action,
|
||||
|
@ -1,6 +1,8 @@
|
||||
import React, { createContext, useContext, useEffect, useState } from 'react';
|
||||
|
||||
import { Helmet } from 'react-helmet';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { Plugin } from '../application/Plugin';
|
||||
import { useSystemSettings } from '../system-settings';
|
||||
|
||||
@ -15,7 +17,11 @@ export const DocumentTitleContext = createContext<DocumentTitleContextProps>({
|
||||
});
|
||||
DocumentTitleContext.displayName = 'DocumentTitleContext';
|
||||
|
||||
export const DocumentTitleProvider: React.FC<{ addonBefore?: string; addonAfter?: string }> = (props) => {
|
||||
export const DocumentTitleProvider = (props: {
|
||||
addonBefore?: string;
|
||||
addonAfter?: string;
|
||||
children: React.ReactNode;
|
||||
}) => {
|
||||
const { addonBefore, addonAfter } = props;
|
||||
const { t } = useTranslation();
|
||||
const [title, setTitle] = useState('');
|
||||
@ -37,7 +43,7 @@ export const DocumentTitleProvider: React.FC<{ addonBefore?: string; addonAfter?
|
||||
);
|
||||
};
|
||||
|
||||
export const RemoteDocumentTitleProvider: React.FC = (props) => {
|
||||
export const RemoteDocumentTitleProvider = (props) => {
|
||||
const ctx = useSystemSettings();
|
||||
return <DocumentTitleProvider addonAfter={ctx?.data?.data?.title}>{props.children}</DocumentTitleProvider>;
|
||||
};
|
||||
|
@ -1,12 +1,13 @@
|
||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
||||
import { uniqBy } from 'lodash';
|
||||
import React, { createContext, useCallback, useEffect, useRef } from 'react';
|
||||
import { useField, useFieldSchema } from '@tachybase/schema';
|
||||
|
||||
import { uniqBy } from 'lodash';
|
||||
|
||||
import { useBlockRequestContext } from '../block-provider/BlockProvider';
|
||||
import { CollectionFieldOptions_deprecated, useCollection_deprecated } from '../collection-manager';
|
||||
import { useDataLoadingMode } from '../modules/blocks/data-blocks/details-multi/setDataLoadingModeSettingsItem';
|
||||
import { removeNullCondition } from '../schema-component';
|
||||
import { mergeFilter, useAssociatedFields } from './utils';
|
||||
import { useDataLoadingMode } from '../modules/blocks/data-blocks/details-multi/setDataLoadingModeSettingsItem';
|
||||
import { GeneralField } from '@tachybase/schema';
|
||||
|
||||
enum FILTER_OPERATOR {
|
||||
AND = '$and',
|
||||
@ -74,7 +75,7 @@ FilterContext.displayName = 'FilterContext';
|
||||
* @param props
|
||||
* @returns
|
||||
*/
|
||||
export const FilterBlockProvider: React.FC = ({ children }) => {
|
||||
export const FilterBlockProvider = ({ children }) => {
|
||||
const [dataBlocks, setDataBlocks] = React.useState<DataBlock[]>([]);
|
||||
return <FilterContext.Provider value={{ dataBlocks, setDataBlocks }}>{children}</FilterContext.Provider>;
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
import React from 'react';
|
||||
|
||||
import * as antIcons from '@ant-design/icons';
|
||||
import AntdIcon, { createFromIconfontCN } from '@ant-design/icons';
|
||||
import React from 'react';
|
||||
|
||||
let IconFont: any;
|
||||
|
||||
@ -35,7 +36,7 @@ interface IconProps {
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
export const Icon = (props: IconProps) => {
|
||||
export const Icon = (props: IconProps): React.ReactNode => {
|
||||
const { type = '', component, ...restProps } = props;
|
||||
if (component) {
|
||||
return <AntdIcon component={component} {...restProps} />;
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { useContextConfigSetting } from '@tachybase/client';
|
||||
import { ArrayCollapse, FormLayout } from '@tachybase/components';
|
||||
import { Field, ISchema, useField, useFieldSchema } from '@tachybase/schema';
|
||||
|
||||
@ -10,6 +9,7 @@ import { SchemaSettings } from '../../../../application/schema-settings/SchemaSe
|
||||
import { useFormBlockContext } from '../../../../block-provider';
|
||||
import { useCollection_deprecated, useCollectionManager_deprecated } from '../../../../collection-manager';
|
||||
import { useFieldComponentName } from '../../../../common/useFieldComponentName';
|
||||
import { useContextConfigSetting } from '../../../../data-source';
|
||||
import { useDesignable, useValidateSchema } from '../../../../schema-component';
|
||||
import { useIsFormReadPretty } from '../../../../schema-component/antd/form-item/FormItem.Settings';
|
||||
import { getTempFieldState } from '../../../../schema-component/antd/form-v2/utils';
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { useDataBlockProps } from '../..';
|
||||
import { useDataBlockParentRecord } from '../../block-provider/hooks/useDataBlockParentRecord';
|
||||
import { useDataBlockParentRecord, useDataBlockProps } from '../..';
|
||||
import { useSourceKey } from './useSourceKey';
|
||||
|
||||
export const useSourceId = () => {
|
||||
|
@ -23,13 +23,14 @@ export interface ActionBarContextValue {
|
||||
*/
|
||||
forceProps?: ActionBarContextForceProps;
|
||||
parentComponents?: string[];
|
||||
children?: React.ReactNode;
|
||||
}
|
||||
|
||||
const ActionBarContext = React.createContext<ActionBarContextValue>({
|
||||
container: null,
|
||||
});
|
||||
|
||||
export const ActionBarProvider: React.FC<ActionBarContextValue> = ({ children, ...props }) => {
|
||||
export const ActionBarProvider = ({ children, ...props }: ActionBarContextValue) => {
|
||||
return <ActionBarContext.Provider value={props}>{children}</ActionBarContext.Provider>;
|
||||
};
|
||||
|
||||
|
@ -1,16 +1,18 @@
|
||||
import { CloseOutlined, SearchOutlined } from '@ant-design/icons';
|
||||
import React, { ChangeEvent, MouseEvent, useMemo, useState } from 'react';
|
||||
import { useFieldSchema } from '@tachybase/schema';
|
||||
|
||||
import { CloseOutlined, SearchOutlined } from '@ant-design/icons';
|
||||
import { Col, Collapse, Input, Row, Tree } from 'antd';
|
||||
import cls from 'classnames';
|
||||
import React, { ChangeEvent, MouseEvent, useMemo, useState } from 'react';
|
||||
|
||||
import { useToken } from '../__builtins__';
|
||||
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
||||
import { SortableItem } from '../../common';
|
||||
import { useCompile, useDesigner, useProps } from '../../hooks';
|
||||
import { useToken } from '../__builtins__';
|
||||
import { EllipsisWithTooltip } from '../input';
|
||||
import { getLabelFormatValue, useLabelUiSchema } from '../record-picker';
|
||||
import { AssociationFilter } from './AssociationFilter';
|
||||
import useStyles from './AssociationFilter.Item.style';
|
||||
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
||||
|
||||
const { Panel } = Collapse;
|
||||
|
||||
@ -94,6 +96,7 @@ export const AssociationFilterItem = withDynamicSchemaProps(
|
||||
return wrapSSR(
|
||||
<SortableItem className={cls(componentCls, hashId, 'nb-block-item', props.className, 'SortableItem')}>
|
||||
<Designer />
|
||||
{/* @ts-ignore upstream type error */}
|
||||
<Collapse defaultActiveKey={defaultActiveKeyCollapse} ghost expandIcon={searchVisible ? () => null : undefined}>
|
||||
<Panel
|
||||
className="Panel"
|
||||
@ -132,6 +135,7 @@ export const AssociationFilterItem = withDynamicSchemaProps(
|
||||
</Col>
|
||||
</Row>
|
||||
}
|
||||
// @ts-ignore upstream type error
|
||||
key={defaultActiveKeyCollapse[0]}
|
||||
>
|
||||
<Tree
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { usePrefixCls } from '@tachybase/components/esm/__builtins__';
|
||||
import React from 'react';
|
||||
|
||||
import type { ColorPickerProps as AntdColorPickerProps } from 'antd/es/color-picker';
|
||||
import cls from 'classnames';
|
||||
import React from 'react';
|
||||
|
||||
import { usePrefixCls } from '../__builtins__';
|
||||
|
||||
type Composed = {
|
||||
ColorPicker: React.FC<AntdColorPickerProps>;
|
||||
|
@ -1,14 +1,16 @@
|
||||
import React from 'react';
|
||||
import { connect, mapProps, mapReadPretty } from '@tachybase/schema';
|
||||
|
||||
import { DatePicker as AntdDatePicker } from 'antd';
|
||||
import type {
|
||||
DatePickerProps as AntdDatePickerProps,
|
||||
RangePickerProps as AntdRangePickerProps,
|
||||
} from 'antd/es/date-picker';
|
||||
import React from 'react';
|
||||
import dayjs from 'dayjs';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import { ReadPretty } from './ReadPretty';
|
||||
import { getDateRanges, mapDatePicker, mapRangePicker } from './util';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
interface IDatePickerProps {
|
||||
utc?: boolean;
|
||||
@ -24,6 +26,7 @@ const DatePickerContext = React.createContext<IDatePickerProps>({ utc: true });
|
||||
export const useDatePickerContext = () => React.useContext(DatePickerContext);
|
||||
export const DatePickerProvider = DatePickerContext.Provider;
|
||||
|
||||
// @ts-ignore
|
||||
const InternalDatePicker: ComposedDatePicker = connect(
|
||||
AntdDatePicker,
|
||||
mapProps(mapDatePicker()),
|
||||
|
@ -1,5 +1,4 @@
|
||||
import React from 'react';
|
||||
import { useCollection } from '@tachybase/client';
|
||||
import { ObjectField, useField, useFieldSchema } from '@tachybase/schema';
|
||||
|
||||
import { Card } from 'antd';
|
||||
@ -7,6 +6,7 @@ import { createStyles } from 'antd-style';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
||||
import { useCollection } from '../../../data-source';
|
||||
import { useCollectionParentRecordData } from '../../../data-source/collection-record/CollectionRecordProvider';
|
||||
import { RecordProvider } from '../../../record-provider';
|
||||
import { useGridCardDetailUrl } from './hooks';
|
||||
|
@ -1,15 +1,16 @@
|
||||
import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { ISchema, observer, RecursionField, Schema, uid, useField, useFieldSchema } from '@tachybase/schema';
|
||||
|
||||
import { TinyColor } from '@ctrl/tinycolor';
|
||||
import { useDndContext, useDndMonitor, useDraggable, useDroppable } from '@dnd-kit/core';
|
||||
import { ISchema, RecursionField, Schema, observer, useField, useFieldSchema } from '@tachybase/schema';
|
||||
import { uid } from '@tachybase/schema';
|
||||
import cls from 'classnames';
|
||||
import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import _ from 'lodash';
|
||||
|
||||
import { useToken } from '../__builtins__';
|
||||
import { useDesignable, useFormBlockContext, useSchemaInitializerRender } from '../../../';
|
||||
import { useFormBlockType } from '../../../block-provider';
|
||||
import { DndContext } from '../../common/dnd-context';
|
||||
import { useToken } from '../__builtins__';
|
||||
import useStyles from './Grid.style';
|
||||
import _ from 'lodash';
|
||||
|
||||
const GridRowContext = createContext<any>({});
|
||||
GridRowContext.displayName = 'GridRowContext';
|
||||
@ -77,7 +78,7 @@ const ColDivider = (props) => {
|
||||
if (!isDragging) {
|
||||
return;
|
||||
}
|
||||
dragIdRef.current = event.active.id;
|
||||
dragIdRef.current = event.active.id as string;
|
||||
const el = dividerRef.current;
|
||||
const prev = el.previousElementSibling as HTMLDivElement;
|
||||
const next = el.nextElementSibling as HTMLDivElement;
|
||||
@ -98,7 +99,7 @@ const ColDivider = (props) => {
|
||||
},
|
||||
onDragEnd(event) {
|
||||
if (!dragIdRef.current) return;
|
||||
if (dragIdRef.current?.startsWith(event.active.id)) {
|
||||
if (dragIdRef.current?.startsWith(event.active.id as string)) {
|
||||
if (!dragIdRef.current.endsWith('_move')) {
|
||||
return;
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
import { LoadingOutlined } from '@ant-design/icons';
|
||||
import React from 'react';
|
||||
import { connect, mapProps, mapReadPretty } from '@tachybase/schema';
|
||||
|
||||
import { LoadingOutlined } from '@ant-design/icons';
|
||||
import { Input as AntdInput } from 'antd';
|
||||
import { InputProps, TextAreaProps } from 'antd/es/input';
|
||||
import React from 'react';
|
||||
import { JSONTextAreaProps, Json } from './Json';
|
||||
|
||||
import { Json, JSONTextAreaProps } from './Json';
|
||||
import { ReadPretty } from './ReadPretty';
|
||||
|
||||
export { ReadPretty as InputReadPretty } from './ReadPretty';
|
||||
|
@ -1,6 +1,7 @@
|
||||
import React from 'react';
|
||||
import { usePrefixCls } from '@tachybase/components';
|
||||
|
||||
import { css } from '@emotion/css';
|
||||
import { Typography } from 'antd';
|
||||
import { InputProps, TextAreaProps } from 'antd/es/input';
|
||||
import cls from 'classnames';
|
||||
@ -122,8 +123,30 @@ const _URL = (props: InputProps) => {
|
||||
);
|
||||
};
|
||||
|
||||
const _JSON = (props) => {
|
||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
||||
const prefixCls = usePrefixCls('json', props);
|
||||
return (
|
||||
<pre
|
||||
className={cls(
|
||||
prefixCls,
|
||||
props.className,
|
||||
css`
|
||||
margin-bottom: 0;
|
||||
line-height: 1.5;
|
||||
font-size: 90%;
|
||||
`,
|
||||
)}
|
||||
style={props.style}
|
||||
>
|
||||
{props.value != null ? JSON.stringify(props.value, null, props.space ?? 2) : ''}
|
||||
</pre>
|
||||
);
|
||||
};
|
||||
|
||||
ReadPretty.Input = _Input;
|
||||
ReadPretty.TextArea = _TextArea;
|
||||
ReadPretty.URL = _URL;
|
||||
ReadPretty.Html = _Html;
|
||||
ReadPretty.TextArea = _TextArea;
|
||||
ReadPretty.JSON = _JSON;
|
||||
|
@ -1,8 +1,10 @@
|
||||
import { dayjsable, formatDayjsValue } from '@tachybase/components';
|
||||
import { connect, mapProps, mapReadPretty } from '@tachybase/schema';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { TimePicker as AntdTimePicker } from 'antd';
|
||||
import { TimePickerProps as AntdTimePickerProps, TimeRangePickerProps } from 'antd/es/time-picker';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { ReadPretty } from './ReadPretty';
|
||||
|
||||
type ComposedTimePicker = React.FC<AntdTimePickerProps> & {
|
||||
@ -26,6 +28,7 @@ const mapTimeFormat = function () {
|
||||
};
|
||||
};
|
||||
|
||||
// @ts-ignore
|
||||
export const TimePicker: ComposedTimePicker = connect(
|
||||
AntdTimePicker,
|
||||
mapProps(mapTimeFormat()),
|
||||
|
@ -1,18 +1,21 @@
|
||||
import { DeleteOutlined, DownloadOutlined, InboxOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons';
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import { connect, mapProps, mapReadPretty } from '@tachybase/schema';
|
||||
|
||||
import { DeleteOutlined, DownloadOutlined, InboxOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons';
|
||||
import { Upload as AntdUpload, Button, Modal, Progress, Space, UploadFile } from 'antd';
|
||||
import cls from 'classnames';
|
||||
import { saveAs } from 'file-saver';
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import LightBox from 'react-image-lightbox';
|
||||
|
||||
import 'react-image-lightbox/style.css'; // This only needs to be imported once in your app
|
||||
|
||||
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
||||
import { useProps } from '../../hooks/useProps';
|
||||
import { ReadPretty } from './ReadPretty';
|
||||
import { isImage, isPdf, toArr, toFileList, toItem, toValue, useUploadProps } from './shared';
|
||||
import { useStyles } from './style';
|
||||
import type { ComposedUpload, DraggerProps, DraggerV2Props, UploadProps } from './type';
|
||||
import { withDynamicSchemaProps } from '../../../application/hoc/withDynamicSchemaProps';
|
||||
import { useProps } from '../../hooks/useProps';
|
||||
|
||||
export const Upload: ComposedUpload = connect(
|
||||
(props: UploadProps) => {
|
||||
@ -324,6 +327,7 @@ Upload.DraggerV2 = withDynamicSchemaProps(
|
||||
|
||||
return wrapSSR(
|
||||
<div className={cls(`${prefixCls}-dragger`, hashId)}>
|
||||
{/* @ts-ignore */}
|
||||
<AntdUpload.Dragger {...useUploadProps({ ...props, ...extraProps, onChange: handleChange })}>
|
||||
<p className={`${prefixCls}-drag-icon`}>
|
||||
{loading ? <LoadingOutlined style={{ fontSize: 36 }} spin /> : <InboxOutlined />}
|
||||
|
@ -188,7 +188,7 @@ function getCurrentRange(element: HTMLElement): RangeIndexes {
|
||||
return result;
|
||||
}
|
||||
|
||||
const useStyles2 = createStyles(({ css }) => {
|
||||
const useStyles2 = createStyles(({ css }, { multiline }) => {
|
||||
return {
|
||||
container: css`
|
||||
&.ant-input-group.ant-input-group-compact {
|
||||
@ -241,7 +241,7 @@ export function TextArea(props) {
|
||||
const inputRef = useRef<HTMLDivElement>(null);
|
||||
const [options, setOptions] = useState([]);
|
||||
const form = useForm();
|
||||
const { styles } = useStyles2();
|
||||
const { styles } = useStyles2({ multiline });
|
||||
const keyLabelMap = useMemo(() => createOptionsValueLabelMap(options), [options]);
|
||||
const [ime, setIME] = useState<boolean>(false);
|
||||
const [changed, setChanged] = useState(false);
|
||||
|
@ -56,6 +56,45 @@ const useStyles = createStyles(({ css }) => {
|
||||
}
|
||||
}
|
||||
`,
|
||||
actionDesigner: css`
|
||||
position: relative;
|
||||
&:hover {
|
||||
.general-schema-designer {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.general-schema-designer {
|
||||
position: absolute;
|
||||
z-index: 999;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: none;
|
||||
background: var(--colorBgSettingsHover);
|
||||
border: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
pointer-events: none;
|
||||
> .general-schema-designer-icons {
|
||||
position: absolute;
|
||||
right: 2px;
|
||||
top: 2px;
|
||||
line-height: 16px;
|
||||
pointer-events: all;
|
||||
.ant-space-item {
|
||||
background-color: var(--colorSettings);
|
||||
color: #fff;
|
||||
line-height: 16px;
|
||||
width: 16px;
|
||||
padding-left: 1px;
|
||||
align-self: stretch;
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
};
|
||||
});
|
||||
|
||||
@ -237,7 +276,7 @@ export const CreateAction = observer(
|
||||
});
|
||||
}, [field, linkageRules, localVariables, variables]);
|
||||
return (
|
||||
<div className={styles.actionDesignerCss}>
|
||||
<div className={styles.actionDesigner}>
|
||||
<FinallyButton
|
||||
{...{
|
||||
inheritsCollections,
|
||||
|
@ -24,7 +24,7 @@ interface AssignedFieldProps {
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
const InternalField: React.FC = (props) => {
|
||||
const InternalField = (props) => {
|
||||
const field = useField<Field>();
|
||||
const fieldSchema = useFieldSchema();
|
||||
const { uiSchema } = useCollectionField_deprecated();
|
||||
|
@ -1,19 +1,21 @@
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
|
||||
import { TableOutlined } from '@ant-design/icons';
|
||||
import { Divider, Empty, Input, MenuProps, Spin } from 'antd';
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import {
|
||||
SchemaInitializerItem,
|
||||
SchemaInitializerMenu,
|
||||
useGetSchemaInitializerMenuItems,
|
||||
useSchemaInitializer,
|
||||
} from '../../application';
|
||||
import { DataSource } from '../../data-source';
|
||||
import { Collection, CollectionFieldOptions } from '../../data-source/collection/Collection';
|
||||
import { Icon } from '../../icon';
|
||||
import { useCompile } from '../../schema-component';
|
||||
import { useSchemaTemplateManager } from '../../schema-templates';
|
||||
import { useCollectionDataSourceItems } from '../utils';
|
||||
import { DataSource } from '../../data-source';
|
||||
import { Icon } from '../../icon';
|
||||
|
||||
const MENU_ITEM_HEIGHT = 40;
|
||||
const STEP = 15;
|
||||
@ -356,7 +358,7 @@ export const DataBlockInitializer = (props: DataBlockInitializerProps) => {
|
||||
{
|
||||
key: name,
|
||||
label: compile(title),
|
||||
icon: typeof icon === 'string' ? <Icon type={icon as string} /> : icon,
|
||||
icon: typeof icon === 'string' ? <Icon type={icon as string} /> : (icon as React.ReactNode),
|
||||
onClick: (info) => {
|
||||
if (info.key !== name) return;
|
||||
onClick({ ...info, item: props });
|
||||
|
@ -7,8 +7,9 @@
|
||||
"dependencies": {
|
||||
"@ant-design/cssinjs": "^1.20.0",
|
||||
"@ant-design/icons": "^5.3.6",
|
||||
"@dnd-kit/core": "^5.0.1",
|
||||
"@dnd-kit/sortable": "^6.0.0",
|
||||
"@dnd-kit/core": "^6.1.0",
|
||||
"@dnd-kit/sortable": "^8.0.0",
|
||||
"@dnd-kit/utilities": "^3.2.2",
|
||||
"@formily/core": "2.2.27",
|
||||
"@formily/grid": "2.2.27",
|
||||
"@formily/json-schema": "2.2.27",
|
||||
@ -22,5 +23,11 @@
|
||||
"classnames": "^2.5.1",
|
||||
"dayjs": "^1.11.11",
|
||||
"react-sticky-box": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"rc-cascader": "3.24.1",
|
||||
"rc-input-number": "9.0.0",
|
||||
"rc-picker": "4.3.0",
|
||||
"rc-tree-select": "5.19.0"
|
||||
}
|
||||
}
|
||||
|
@ -1,62 +0,0 @@
|
||||
// FOR: https://github.com/ant-design/antd-moment-webpack-plugin
|
||||
import { isArr, isFn, isEmpty } from '@formily/shared';
|
||||
import moment, { MomentInput, Moment } from 'moment';
|
||||
|
||||
export function dayjsable(value: MomentInput, format?: string): Moment;
|
||||
export function dayjsable(value: MomentInput[], format?: string): Moment[];
|
||||
|
||||
export function dayjsable(value: MomentInput | MomentInput[], format?: string): any {
|
||||
if (!value) return value;
|
||||
if (Array.isArray(value)) {
|
||||
return value.map((val) => {
|
||||
const date = moment(val, format);
|
||||
if (date.isValid()) return date;
|
||||
const _date = moment(val);
|
||||
return _date.isValid() ? _date : val;
|
||||
});
|
||||
} else {
|
||||
const date = moment(value, format);
|
||||
if (date.isValid()) return date;
|
||||
const _date = moment(value);
|
||||
return _date.isValid() ? _date : value;
|
||||
}
|
||||
}
|
||||
|
||||
export const formatDayjsValue = (value: any, format: any, placeholder?: string): string | string[] => {
|
||||
const validFormatDate = (date: any, format: any) => {
|
||||
if (typeof date === 'number') {
|
||||
return moment(date).format(format);
|
||||
}
|
||||
const _date = moment(date, format);
|
||||
return _date.isValid() ? _date.format(format) : date;
|
||||
};
|
||||
|
||||
const formatDate = (date: any, format: any, i = 0) => {
|
||||
if (!date) return placeholder;
|
||||
if (isArr(format)) {
|
||||
const _format = format[i];
|
||||
if (isFn(_format)) {
|
||||
return _format(date);
|
||||
}
|
||||
if (isEmpty(_format)) {
|
||||
return date;
|
||||
}
|
||||
return validFormatDate(date, _format);
|
||||
} else {
|
||||
if (isFn(format)) {
|
||||
return format(date);
|
||||
}
|
||||
if (isEmpty(format)) {
|
||||
return date;
|
||||
}
|
||||
return validFormatDate(date, format);
|
||||
}
|
||||
};
|
||||
if (isArr(value)) {
|
||||
return value.map((val, index) => {
|
||||
return formatDate(val, format, index);
|
||||
});
|
||||
} else {
|
||||
return value ? formatDate(value, format) : value || placeholder;
|
||||
}
|
||||
};
|
@ -1,4 +1,5 @@
|
||||
import { ReactElement } from 'react';
|
||||
|
||||
import * as ReactDOM from 'react-dom';
|
||||
import type { Root } from 'react-dom/client';
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
import React, { createContext, useContext, useMemo } from 'react';
|
||||
|
||||
import { DndContext, DragEndEvent, DragStartEvent } from '@dnd-kit/core';
|
||||
import { SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
||||
import { ReactFC } from '@formily/reactive-react';
|
||||
import React, { createContext, useContext, useMemo } from 'react';
|
||||
|
||||
export type { Transform } from '@dnd-kit/utilities';
|
||||
|
||||
export interface ISortableContainerProps {
|
||||
list: any[];
|
||||
|
@ -1,10 +1,12 @@
|
||||
import React, { createContext, forwardRef, useContext } from 'react';
|
||||
|
||||
import { CopyOutlined, DeleteOutlined, DownOutlined, MenuOutlined, PlusOutlined, UpOutlined } from '@ant-design/icons';
|
||||
import { ArrayField } from '@formily/core';
|
||||
import { ReactFC, RecordScope, RecordsScope, Schema, useField, useFieldSchema } from '@formily/react';
|
||||
import { clone, isUndef, isValid } from '@formily/shared';
|
||||
import { Button, ButtonProps } from 'antd';
|
||||
import cls from 'classnames';
|
||||
import React, { createContext, forwardRef, useContext } from 'react';
|
||||
|
||||
import { SortableHandle, usePrefixCls } from '../__builtins__';
|
||||
import useStyle from './style';
|
||||
|
||||
@ -182,7 +184,7 @@ const Copy = forwardRef<HTMLButtonElement, CommonProps>((props, ref) => {
|
||||
if (array.field?.pattern !== 'editable') return null;
|
||||
return wrapSSR(
|
||||
<Button
|
||||
type="ghost"
|
||||
ghost
|
||||
{...props}
|
||||
style={{
|
||||
padding: '0 0 0 6px',
|
||||
@ -224,7 +226,7 @@ const Remove = forwardRef<HTMLSpanElement, CommonProps>((props, ref) => {
|
||||
if (array.field?.pattern !== 'editable') return null;
|
||||
return wrapSSR(
|
||||
<Button
|
||||
type="ghost"
|
||||
ghost
|
||||
{...props}
|
||||
style={{
|
||||
padding: '0 0 0 6px',
|
||||
@ -266,7 +268,7 @@ const MoveDown = forwardRef<HTMLSpanElement, CommonProps>((props, ref) => {
|
||||
if (array.field?.pattern !== 'editable') return null;
|
||||
return (
|
||||
<Button
|
||||
type="ghost"
|
||||
ghost
|
||||
{...props}
|
||||
style={{
|
||||
padding: '0 0 0 6px',
|
||||
@ -307,7 +309,7 @@ const MoveUp = forwardRef<HTMLSpanElement, CommonProps>((props, ref) => {
|
||||
if (array.field?.pattern !== 'editable') return null;
|
||||
return (
|
||||
<Button
|
||||
type="ghost"
|
||||
ghost
|
||||
{...props}
|
||||
style={{
|
||||
padding: '0 0 0 6px',
|
||||
|
@ -1,9 +1,19 @@
|
||||
import React from 'react';
|
||||
|
||||
import { LoadingOutlined } from '@ant-design/icons';
|
||||
import { connect, mapProps, mapReadPretty } from '@formily/react';
|
||||
import { Cascader as AntdCascader } from 'antd';
|
||||
import React from 'react';
|
||||
|
||||
import { PreviewText } from '../preview-text';
|
||||
|
||||
export type {
|
||||
BaseOptionType,
|
||||
DefaultOptionType,
|
||||
FieldNames,
|
||||
MultipleCascaderProps,
|
||||
SingleCascaderProps,
|
||||
} from 'rc-cascader';
|
||||
|
||||
export const Cascader = connect(
|
||||
AntdCascader,
|
||||
mapProps(
|
||||
|
@ -2,8 +2,11 @@ import { connect, mapProps, mapReadPretty } from '@formily/react';
|
||||
import { DatePicker as AntdDatePicker } from 'antd';
|
||||
import { DatePickerProps as AntdDatePickerProps } from 'antd/es/date-picker';
|
||||
import dayjs from 'dayjs';
|
||||
import { PreviewText } from '../preview-text';
|
||||
|
||||
import { dayjsable, formatDayjsValue } from '../__builtins__';
|
||||
import { PreviewText } from '../preview-text';
|
||||
|
||||
export type { PickerProps } from 'rc-picker';
|
||||
|
||||
type DatePickerProps<PickerProps> = Exclude<PickerProps, 'value' | 'onChange'> & {
|
||||
value: string;
|
||||
|
@ -1,24 +1,30 @@
|
||||
import React, { createContext, useContext } from 'react';
|
||||
|
||||
import { Field } from '@formily/core';
|
||||
import { observer, ReactFC, useField } from '@formily/react';
|
||||
import { isArr, isValid, toArr } from '@formily/shared';
|
||||
import type {
|
||||
CascaderProps,
|
||||
DatePickerProps,
|
||||
InputNumberProps,
|
||||
InputProps,
|
||||
SelectProps,
|
||||
TimePickerProps,
|
||||
TimeRangePickerProps,
|
||||
TreeSelectProps,
|
||||
import {
|
||||
Space,
|
||||
Tag,
|
||||
type CascaderProps,
|
||||
type DatePickerProps,
|
||||
type InputNumberProps,
|
||||
type InputProps,
|
||||
type SelectProps,
|
||||
type TimePickerProps,
|
||||
type TimeRangePickerProps,
|
||||
type TreeSelectProps,
|
||||
} from 'antd';
|
||||
import { Space, Tag } from 'antd';
|
||||
import type { DefaultOptionType } from 'antd/lib/cascader';
|
||||
import type { RangePickerProps as DateRangePickerProps } from 'antd/lib/date-picker';
|
||||
import cls from 'classnames';
|
||||
import React, { createContext, useContext } from 'react';
|
||||
|
||||
import { formatDayjsValue, usePrefixCls } from '../__builtins__';
|
||||
import useStyle from './style';
|
||||
|
||||
export type { InputNumberProps } from 'rc-input-number';
|
||||
export type { TreeSelectProps } from 'rc-tree-select';
|
||||
|
||||
export const PlaceholderContext = createContext<React.ReactNode>('N/A');
|
||||
|
||||
export const Placeholder = PlaceholderContext.Provider;
|
||||
|
@ -1,8 +1,9 @@
|
||||
import { connect, mapProps, mapReadPretty } from '@formily/react';
|
||||
import { TimePicker as AntdTimePicker, TimePickerProps as AntdTimePickerProps, TimeRangePickerProps } from 'antd';
|
||||
import dayjs from 'dayjs';
|
||||
import { PreviewText } from '../preview-text';
|
||||
|
||||
import { dayjsable, formatDayjsValue } from '../__builtins__';
|
||||
import { PreviewText } from '../preview-text';
|
||||
|
||||
type ComposedTimePicker = React.FC<React.PropsWithChildren<AntdTimePickerProps>> & {
|
||||
RangePicker?: React.FC<React.PropsWithChildren<TimeRangePickerProps>>;
|
||||
@ -25,6 +26,7 @@ const mapTimeFormat = function () {
|
||||
};
|
||||
};
|
||||
|
||||
// @ts-ignore
|
||||
const InternalTimePicker: ComposedTimePicker = connect(
|
||||
AntdTimePicker,
|
||||
mapProps(mapTimeFormat()),
|
||||
|
@ -1,11 +1,13 @@
|
||||
import { Model } from './model';
|
||||
import { isPlainObject } from '@tachybase/utils';
|
||||
|
||||
import { Model as SequelizeModel } from 'sequelize';
|
||||
|
||||
import { Collection } from './collection';
|
||||
import Database from './database';
|
||||
import { InheritedSyncRunner } from './inherited-sync-runner';
|
||||
import { InheritedCollection } from './inherited-collection';
|
||||
import { Model as SequelizeModel } from 'sequelize';
|
||||
import { ZeroColumnTableError } from './errors/zero-column-table-error';
|
||||
import { isPlainObject } from '@tachybase/utils';
|
||||
import { InheritedCollection } from './inherited-collection';
|
||||
import { InheritedSyncRunner } from './inherited-sync-runner';
|
||||
import { Model } from './model';
|
||||
|
||||
export class SyncRunner {
|
||||
private readonly collection: Collection;
|
||||
@ -42,8 +44,8 @@ export class SyncRunner {
|
||||
return;
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
const collectionSyncOptions = this.database.collectionFactory.collectionTypes.get(
|
||||
// @ts-ignore
|
||||
this.collection.constructor,
|
||||
)?.onSync;
|
||||
|
||||
|
@ -10,5 +10,8 @@
|
||||
"@tachybase/utils": "workspace:*",
|
||||
"lodash": "4.17.21",
|
||||
"mathjs": "^10.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.12.12"
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Registry } from '@tachybase/utils/client';
|
||||
|
||||
import mathjs from './engines/mathjs';
|
||||
import formulajs from './engines/formulajs';
|
||||
import mathjs from './engines/mathjs';
|
||||
import string from './engines/string';
|
||||
|
||||
export interface Evaluator {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { Registry } from '@tachybase/utils';
|
||||
|
||||
import { Evaluator } from '../utils';
|
||||
import mathjs from '../utils/mathjs';
|
||||
import formulajs from '../utils/formulajs';
|
||||
import mathjs from '../utils/mathjs';
|
||||
import string from '../utils/string';
|
||||
|
||||
export { Evaluator, evaluate, appendArrayColumn } from '../utils';
|
||||
|
32
packages/core/evaluators/tsconfig.json
Normal file
32
packages/core/evaluators/tsconfig.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"lib": ["esnext", "DOM.Iterable", "DOM"],
|
||||
"esModuleInterop": true,
|
||||
"moduleResolution": "node",
|
||||
"jsx": "react",
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"allowJs": true,
|
||||
"noUnusedLocals": false,
|
||||
"preserveConstEnums": true,
|
||||
"skipLibCheck": true,
|
||||
"skipDefaultLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"inlineSources": true,
|
||||
"resolveJsonModule": true,
|
||||
"declaration": true,
|
||||
"typeRoots": ["./node_modules/@types"],
|
||||
"experimentalDecorators": true,
|
||||
"downlevelIteration": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"lib",
|
||||
"client.d.ts",
|
||||
"server.d.ts",
|
||||
"client.js",
|
||||
"server.js",
|
||||
"plugin-symlink.d.ts",
|
||||
"plugin-symlink.js"
|
||||
]
|
||||
}
|
@ -13,5 +13,8 @@
|
||||
"lodash": "^4.17.21",
|
||||
"path-to-regexp": "^6.1.0",
|
||||
"qs": "^6.9.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.12.12"
|
||||
}
|
||||
}
|
||||
|
6
packages/core/resourcer/tsconfig.json
Normal file
6
packages/core/resourcer/tsconfig.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": "../../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"typeRoots": ["./node_modules/@types"]
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"extends": "../../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"types": ["vitest/globals"]
|
||||
"typeRoots": ["./node_modules/@types"]
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -15,6 +15,7 @@
|
||||
"inlineSources": true,
|
||||
"resolveJsonModule": true,
|
||||
"declaration": true,
|
||||
"typeRoots": ["./node_modules/@types"],
|
||||
"experimentalDecorators": true,
|
||||
"downlevelIteration": true
|
||||
},
|
||||
|
@ -9,7 +9,7 @@
|
||||
"main": "dist/server/index.js",
|
||||
"devDependencies": {
|
||||
"@ant-design/icons": "^5.3.6",
|
||||
"@dnd-kit/core": "^5.0.1",
|
||||
"@dnd-kit/core": "^6.1.0",
|
||||
"@tachybase/components": "workspace:*",
|
||||
"@tachybase/schema": "workspace:*",
|
||||
"ahooks": "^3.7.2",
|
||||
|
2166
pnpm-lock.yaml
2166
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user