封装一个 useFeatures

This commit is contained in:
Wang Kejun 2022-12-29 14:06:48 +08:00
parent 3d8f90391e
commit b3affb3be5
10 changed files with 47 additions and 40 deletions

View File

@ -416,12 +416,6 @@ exports.default = OakComponent({
});
});
},
getUrl: function (extraFile, style) {
return this.features.extraFile.getUrl(extraFile, style);
},
formatBytes: function (size) {
return this.features.extraFile.formatBytes(size);
},
},
observers: {
maxNumber: function () {

View File

@ -23,7 +23,5 @@ export default function render(props: WebComponentProps<EntityDict, 'extraFile',
}, {
onPickByWeb: (files: UploadFile[], callback?: (file: any, status: string) => void) => void;
onDeleteByWeb: (file: UploadFile) => void;
formatBytes: (size: number) => string;
getUrl: (extraFile?: EntityDict['extraFile']['OpSchema'] | null, style?: string) => string;
}>): JSX.Element;
export {};

View File

@ -5,9 +5,10 @@ var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var antd_1 = require("antd");
var icons_1 = require("@ant-design/icons");
var utils_1 = require("antd/es/upload/utils");
var classnames_1 = tslib_1.__importDefault(require("classnames"));
var web_module_less_1 = tslib_1.__importDefault(require("./web.module.less"));
var utils_1 = require("antd/es/upload/utils");
var useFeatures_1 = tslib_1.__importDefault(require("../../../hooks/useFeatures"));
function getListType(theme) {
var themeMap = {
file: 'text',
@ -21,7 +22,8 @@ function getListType(theme) {
function render(props) {
var _this = this;
var _a = props.data, _b = _a.accept, accept = _b === void 0 ? 'image/*' : _b, _c = _a.maxNumber, maxNumber = _c === void 0 ? 20 : _c, _d = _a.multiple, multiple = _d === void 0 ? maxNumber !== 1 : _d, _e = _a.draggable, draggable = _e === void 0 ? false : _e, _f = _a.theme, theme = _f === void 0 ? 'image' : _f, tips = _a.tips, beforeUpload = _a.beforeUpload, disabled = _a.disabled, style = _a.style, className = _a.className, _g = _a.directory, directory = _g === void 0 ? false : _g, onPreview = _a.onPreview, onDownload = _a.onDownload, children = _a.children, _h = _a.showUploadList, showUploadList = _h === void 0 ? true : _h, files = _a.files, disableInsert = _a.disableInsert;
var _j = props.methods, onPickByWeb = _j.onPickByWeb, onDeleteByWeb = _j.onDeleteByWeb, formatBytes = _j.formatBytes, getUrl = _j.getUrl;
var _j = props.methods, onPickByWeb = _j.onPickByWeb, onDeleteByWeb = _j.onDeleteByWeb;
var features = (0, useFeatures_1.default)();
var _k = tslib_1.__read((0, react_1.useState)([]), 2), newFiles = _k[0], setNewFiles = _k[1];
var _l = tslib_1.__read((0, react_1.useState)([]), 2), newUploadFiles = _l[0], setNewUploadFiles = _l[1];
var listType = getListType(theme);
@ -36,8 +38,8 @@ function render(props) {
var extraFileToUploadFile = function (extraFile) {
return {
id: extraFile.id,
url: getUrl(extraFile),
thumbUrl: getUrl(extraFile),
url: features.extraFile.getUrl(extraFile),
thumbUrl: features.extraFile.getUrl(extraFile),
name: extraFile.filename + (extraFile.extension || ''),
fileName: extraFile.filename + (extraFile.extension || ''),
size: extraFile.size,
@ -120,7 +122,7 @@ function render(props) {
dataIndex: 'size',
title: '文件大小',
render: function (value, record, index) {
return formatBytes(value);
return features.extraFile.formatBytes(value);
},
},
{

4
lib/hooks/useFeatures.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
import { GeneralFeatures } from '../features';
import { EntityDict } from '../general-app-domain';
import { BRC, FrcAspectDict, FRC } from '../types/RuntimeCxt';
export default function useFeatures(): GeneralFeatures<EntityDict, BRC, FRC, FrcAspectDict>;

9
lib/hooks/useFeatures.js Normal file
View File

@ -0,0 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var features_1 = require("oak-frontend-base/lib/platforms/web/features");
// react 独有
function useFeatures() {
return (0, features_1.useFeatures)();
}
exports.default = useFeatures;
;

View File

@ -2,9 +2,9 @@
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var features_1 = require("oak-frontend-base/lib/platforms/web/features");
var useFeatures_1 = tslib_1.__importDefault(require("./useFeatures"));
function useMyInfo() {
var features = (0, features_1.useFeatures)();
var features = (0, useFeatures_1.default)();
var getMyInfo = function () {
var _a, _b;
var userInfo = features.token.getUserInfo();

View File

@ -344,15 +344,6 @@ export default OakComponent({
});
}
},
getUrl(
extraFile?: EntityDict['extraFile']['OpSchema'] | null,
style?: string
) {
return this.features.extraFile.getUrl(extraFile, style);
},
formatBytes(size: number) {
return this.features.extraFile.formatBytes(size);
},
},
observers: {

View File

@ -9,12 +9,13 @@ import {
Table,
} from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import { file2Obj } from 'antd/es/upload/utils'
import { RcFile } from 'antd/es/upload/interface';
import classNames from 'classnames';
import Style from './web.module.less';
import { WebComponentProps } from 'oak-frontend-base';
import { EntityDict } from '../../../general-app-domain';
import { file2Obj } from 'antd/es/upload/utils'
import { RcFile } from 'antd/es/upload/interface';
import useFeatures from '../../../hooks/useFeatures';
interface NewUploadFile extends UploadFile {
id?: string;
@ -66,11 +67,6 @@ export default function render(
callback?: (file: any, status: string) => void
) => void;
onDeleteByWeb: (file: UploadFile) => void;
formatBytes: (size: number) => string;
getUrl: (
extraFile?: EntityDict['extraFile']['OpSchema'] | null,
style?: string
) => string;
}
>
) {
@ -93,7 +89,8 @@ export default function render(
files,
disableInsert,
} = props.data;
const { onPickByWeb, onDeleteByWeb, formatBytes, getUrl } = props.methods;
const { onPickByWeb, onDeleteByWeb } = props.methods;
const features = useFeatures();
const [newFiles, setNewFiles] = useState<
EntityDict['extraFile']['OpSchema'][]
@ -117,8 +114,8 @@ export default function render(
): NewUploadFile => {
return {
id: extraFile.id,
url: getUrl(extraFile),
thumbUrl: getUrl(extraFile),
url: features.extraFile.getUrl(extraFile),
thumbUrl: features.extraFile.getUrl(extraFile),
name: extraFile.filename + (extraFile.extension || ''),
fileName: extraFile.filename + (extraFile.extension || ''),
size: extraFile.size!,
@ -241,7 +238,9 @@ export default function render(
dataIndex: 'size',
title: '文件大小',
render: (value, record, index) => {
return formatBytes(value as number);
return features.extraFile.formatBytes(
value as number
);
},
},
{

13
src/hooks/useFeatures.ts Normal file
View File

@ -0,0 +1,13 @@
import { useFeatures as useCommonFeatures } from 'oak-frontend-base/lib/platforms/web/features';
import { GeneralFeatures } from '../features';
import { EntityDict } from '../general-app-domain';
import { BRC, FrcAspectDict, FRC } from '../types/RuntimeCxt';
// react 独有
export default function useFeatures() {
return useCommonFeatures<
GeneralFeatures<EntityDict, BRC, FRC, FrcAspectDict>
>();
};

View File

@ -1,13 +1,10 @@
import React, { useState, useEffect } from 'react';
import { GeneralFeatures } from '../features';
import { useFeatures } from 'oak-frontend-base/lib/platforms/web/features';
import { EntityDict } from '../general-app-domain';
import { BRC, FrcAspectDict, FRC} from '../types/RuntimeCxt';
import { OpSchema as ExtraFile } from '../general-app-domain/ExtraFile/Schema';
import useFeatures from './useFeatures';
export default function useMyInfo() {
const features = useFeatures<GeneralFeatures<EntityDict, BRC, FRC, FrcAspectDict>>();
const features = useFeatures();
const getMyInfo = () => {
const userInfo = features.token.getUserInfo();