需要去野外,没有
这个 neeto-fields-nano 能够管理动态添加的字段
(常被称作自定义字段)横跨neto应用程序. 纳米出口
页:1 @bigbinary/neeto-fields-frontend 国家防范机制一揽子计划 neeto-fields-engine
铁路发展引擎.
目录
用主机应用程序开发
发动机
该引擎用于管理横跨neto产品的任何实体的字段.
安装
-
将此行添加到您的应用程序的 Gemfile 中 :
source "NEETO_GEM_SERVER_URL" do # ..existing gems gem 'neeto-fields-engine' end -
然后执行:
bundle install -
将此行添加到您的应用程序
config/routes.rb文件 :mount NeetoFieldsEngine::Engine, at: "/neeto_fields" -
运行以下命令以复制从引擎到主机的迁移 应用程序 :
rails g neeto_fields_engine:install -
添加迁移到数据库 :
bundle exec rails db:migrate -
使用下列方法在模型之间产生所需的关联 命令 :
rails g neeto_fields_engine:associations这将促使用户输入两件事:
- 车主的名字.
- 资源模型名称.
探索 拥有者信息( R) 页:1 细节.
-
向您添加所需的权限
permissions.yml文件 :neeto_fields_engine.view_fields- 允许查看字段neeto_fields_engine.manage_fields- 允许创建、更新、删除, 和重排字段neeto_fields_engine.view_field_values- 允许查看字段值neeto_fields_engine.manage_field_values- 允许创建、更新和 删除字段值
支持的权限
该引擎通过下列方式提供颗粒许可控制 权限 :
neeto_fields_engine.view_fields- 允许用户查看字段neeto_fields_engine.manage_fields- 允许用户创建,更新, 删除并重排字段neeto_fields_engine.view_field_values- 允许用户查看字段 数值neeto_fields_engine.manage_field_values- 允许用户创建, 更新并删除字段值
策略召回
该引擎通过该引擎暴露出以下政策方法: FieldPolicy 类 :
can_view_fields?- 检查用户能否查看字段can_manage_fields?- 检查用户是否能够管理字段can_view_field_values?- 检查用户能否查看字段值can_manage_field_values?- 检查用户能否管理字段值
这些方法被控制器的授权回调自动使用 并在需要时可在主机应用程序中被推翻.
自定义
参考 引擎自定义 学习 定制引擎的默认行为 .
前端软件包
安装
安装最新的 neetoFields nano 使用下列命令的软件包:
yarn add @bigbinary/neeto-fields-frontend
依赖性
neeto-fields-nano 拥有对等的依赖性,需要使用纳米
适当的。 使用以下命令安装对等依赖 :
yarn add uuid
发展指示
检查 前端软件包开发指南 用于开发前端软件包的分步指令.
构成部分
1. 联合国. FieldsDashboard
这个 FieldsDashboard 构成部分充当管理所有项目的仪表板
与自定义外地有关的业务。 它的运作不需要任何道具
默认,但您可以通过通过可选道具来自定义其行为.
道具
-
rowData: 代表仪表板内表格的行数据. -
buildColumnData: 构建列数据的函数( 在 netoUI 表格中) 表格。 此函数获得onDeleteClick, (中文(简体) ),onEditClick回调和defaultColumns作为论据. -
showOwnersInMenu: 接受布尔值。 设定为true,田园 以分类格式(侧菜单)显示。 默认, 字段根据资源类型进行分类. -
resourceType: 明确规定resource_type区域 在仪表板表中显示。 此道具预计当showOwnersInMenu设置为true。 。 。 . -
allowedKinds:指定允许创建的字段类型列表. -
paneProps: 道具将传递到添加/编辑面板上。 它接受 随后.children: 将在窗帘内制造的儿童部件.validations: 表格输入字段在children。 。 。 .validations必须是带有字段名的对象 作为键和相应的yup验证方案作为值.initialValues: formik 输入字段的初始值children。它作为对象提供,字段名称作为密钥 相应的数值.hideRequiredSwitch: 设置为布尔值时true隐藏切换 切换为isRequried。 。 。 .onMutationSuccess: 在成功时触发的召回函数 突变函数(创建,更新和删除).lookupOptions: 指定可供查找的资源类型lookup字段.allowSelectingAccessType:布尔值(默认)false) (中文(简体) ). 设定为true,允许选择字段访问类型(everyone或者说restricted(中文(简体) ) 将外地能见度限制在具体组织的作用.
-
showStateFilter: 指定是显示还是隐藏的布尔值 状态过滤器. -
fieldStatesTaxonomy: 指定要为active财务报告和审定财务报表inactive各州. -
breadcrumbs: 指定要在仪表盘上显示的面包屑 页 次. -
helpDescription: 要设置弹出式描述, 这可以是 字符串或自定义组件. -
helpDocUrl: 指定关于字段的帮助文档的URL。 这个 URL将在NoData屏幕. -
nameAliases: 此属性接受别名作为密钥值对 在标题和菜单栏中显示资源类型的名称. -
headerTitle: 明确指定标题。 默认为"fields" 。 这个 并具体说明标题HelpPopover。 。 。 . -
resources:对于基于所有者的字段分类,提供一系列 对象为id财务报告和审定财务报表name每个所有者都有属性。 资源 基于类型分类,使用对象数组label财务报告和审定财务报表value属性代表每个资源类型. -
headerSize: 明确指定页眉大小。 默认为"小" . -
canManageFields: 高于默认权限的布尔值 检查管理字段。 未提供时,构成部分核对neeto_fields_engine.manage_fields全球道具允许. -
onDeleteSuccess: 在成功时触发的召回函数 字段删除. -
onReorderSuccess: 在成功时触发的召回函数 田地重排顺序.如未提供资源,按资源类型分类 菜单栏将获取所有资源类型。 对于基于所有者的分类,它 将获取并列出组织内的所有所有者.
使用量
-
何时
Organization是田园的主人.import { FieldsDashboard } from "@bigbinary/neeto-fields-frontend"; <FieldsDashboard allowedKinds={["text", "number", "lookup"]} buildColumnData={({ defaultColumns }) => [ ...defaultColumns, { dataIndex: "isSystem", index: "isSystem", title: t("titles.systemField"), render: boolVal => (boolVal ? "Yes" : "No"), }, ]} fieldStatesTaxonomy={{ active: "Active", inactive: "Deactivated" }} paneProps={{ children: <HostSpecificInputFields />, validations: { hostSpecificInputName: validationSchema, }, initialValues: { hostSpecificInputName: initialValue, }, lookupOptions: [ { label: "Contact", value: "contact" }, { label: "Company", value: "company" }, ], }} breadcrumbs={[ { link: "/", text: "Home", }, { link: "/", text: "Settings", }, ]} />;使用情况 必须去德士克
-
何时
Organization不是田园的主人。 假设老板是Project。 。 。 .import { FieldsDashboard } from "@bigbinary/neeto-fields-frontend"; <FieldsDashboard allowedKinds={["text", "number", "lookup"]} resourceType="tasks" showOwnersInMenu fieldStatesTaxonomy={{ active: "Active", inactive: "Deactivated" }} paneProps={{ children: <HostSpecificInputFields />, validations: { hostSpecificInputName: validationSchema, }, initialValues: { hostSpecificInputName: initialValue, }, lookupOptions: [ { label: "Contact", value: "contact" }, { label: "Company", value: "company" }, ], }} breadcrumbs={[ { link: "/", text: "Home", }, { link: "/", text: "Settings", }, ]} />;使用情况 需要论坛
2. 联合国. FieldsPane
这个 FieldsPane 组件处理 Add / Edit 外地业务.
道具
isOpen: 指定窗格打开/关闭状态的布尔状态.onClose: 关闭窗格时要执行的函数.resourceType:指定要通过 窗关上.allowedKinds: 指定允许创建的字段类型列表.children: 窗帘的儿童部分.additionalValidations: Formik 字段的验证children。 。 。 .initialValues: Formik 字段的初始值children。 。 。 .selectedField: 编辑涉及的字段对象. 如果这样 道具被给出,相板将起到编辑相板的作用. 换作是添加相片.hideRequiredSwitch: 指定是否隐藏Is required切换切换 在平板电脑上.ownerId: 所有人的身份证明,以防所有人不是组织.onMutationSuccess: 成功时触发的回调功能 的变异函数(创建、更新和删除).additionalPayload: 用于发送外地创建中的额外数据 载荷。 当创建一个 新建区域.lookupOptions: 指定支持的查找资源类型 字段。 当lookup包含在allowedKinds。 。 。 .allowSelectingAccessType:布尔值(默认)false) (中文(简体) ). 设定为true,允许选择字段访问类型(everyone或者说restricted(中文(简体) ) 并具体说明受限制的组织作用.
使用量
import { FieldsPane } from "@biginary/neeto-fields-frontend";
const [fieldPaneOpen, setFieldPaneOpen] = useState(false);
<FieldsPane
isOpen={fieldPaneOpen}
allowedKinds={["text", "number","lookup"]}
resourceType="users"
lookupOptions={[
{ label: "Contact", value: "contact" },
{ label: "Company", value: "company" }
]}
additionalValidations={{
hostSpecificInputName: validationSchema,
}}
initialValues={{ hostSpecificInputName: initialValue }}
onClose={() => setFieldPaneOpen(false)}
>
<HostSpecificInputFields />
</FieldsPane>;
3个. FieldValuesContainer
这个 FieldValuesContainer 组件处理与 a 相关的字段值
特定资源.
道具
resourceType: 资源类型.fieldValues: 与从 反应.fields: 与资源类型相关的字段. 这是可选道具。 若为 未提供组件将在内部取回字段 .resourceId:资源标识.ownerId:主人的身份证. 只有当所有者不在时才需要这个道具 一个组织.customComponents: 如果主机应用程序有额外内容kind其他 ,您可以指定要显示的组件 与该道具对应。 这需要kind名称为 键和组件提供回调函数作为值。 回电 函数可以预期field作为参数的对象.className:为作型而取的班名.showBorder:布尔值以指定是显示还是隐藏边框. 默认真实.formRefs: 可用于访问Formik上下文的React Ref对象 键值对.disabled:布尔值指定是否禁用所有字段.isRequiredColumnName: 具有该值的列的名称 如果一个字段值是required说不说 默认是isRequired栏.fieldClassName: 样式的分类名称div包含输入 字段.onMutate:在突变上被触发的回调函数.onMutationSuccess: 成功时触发的回调功能 的变异函数(创建、更新和删除).blockNavigation: 指定是否封锁导航的布尔值 如果我们输入了未保存的字段值.blockNavigationAlertProps:要传递给警报的道具. 它接受 随后.titlemessagesubmitButtonLabelcancelButtonLabel
canManageFieldValues: 高于默认权限的布尔值 检查管理字段值。 未提供时,构成部分核对neeto_fields_engine.manage_field_values全球道具允许.
使用量
说这里的资源是 user。 。 。 .
import { FieldValuesContainer } from "@bigbinary/neeto-fields-frontend";
const formRefs = useRef({});
const queryClient = useQueryClient();
<FieldValuesContainer
blockNavigation
formRefs={formRefs}
fieldValues={user.fieldValues} // We expect the user response from host's backend to send associated field_values with it.
resourceId={user?.id}
resourceType="users"
onMutationSuccess={() =>
queryClient.invalidateQueries({ queryKey: ["users"] })
}
onMutate={() => queryClient.setQueriesData({ queryKey: ["users"] }, modifier)}
customComponents={{
hostSpecificKindName: field => <HostSpecificInputFields />,
}}
blockNavigationProps={{
title: "Changes not saved!",
message: "You've not saved the changes made.",
}}
/>;
4.四. FieldInputs
这个 FieldInputs 组件为获取的字段提供输入 UI.
道具
fields: 所有取出字段的数组.customComponents:如果主机应用程序除此之外还有任何其他类型 ,您可以指定要显示相应的组件 使用这个道具 它以善良的名字为关键 组件将调用函数作为值。 回调函数可以 预计field对象.formRefs: 可用于访问Formik上下文的React Ref对象 该表.disabled:布尔值指定是否禁用所有字段.isRequiredColumnName: 具有该值的列的名称 如果一个字段值是required说不说.
时间轴: 说明:
要初始化此窗体字段的值, 您需要使用
mergeInitialValues函数.要从窗体格式提交值, 您需要使用
transformValues要抓取的函数 正确的数据来自 neto-fields.
使用量
import {
FieldInputs,
useFetchFields,
neetoFieldsUtils,
} from "@bigbinary/neeto-fields-frontend";
const formRef = useRef();
const HostForm = () => {
const {
data: { fields },
} = useFetchFields({
resourceType: "users",
});
const initialValues = neetoFieldsUtils.mergeInitialValues({
initialValues: INITIAL_VALUES,
fields,
});
return (
<Form
formikProps={{
initialValues,
validationSchema: VALIDATION_SCHEMA,
onSubmit: values =>
onSubmit(neetoFieldsUtils.transformValues({ values, fields })),
enableReinitialize: true,
}}
>
{/* Other host specific input fields */}
<FieldInputs formRef={formRef} fields={fields} />
<Button type="submit" label="Submit" />
</Form>
);
};
5 (韩语). InlineFieldValueInput
这个 InlineFieldValueInput 组件使字段值输入UI.
道具
fields: 所有取出字段的数组.fieldValues: 与资源相关的字段值.resourceType: 资源类型.resourceId:资源标识.ownerId: 所有人的身份证明,以防所有人不是组织.onMutate: 突变时触发的回调函数onMutationSuccess: 成功时触发的回调功能 具有字段价值的变异函数.canManageFieldValues: 高于默认权限的布尔值 检查管理字段值。 未提供时,构成部分核对neeto_fields_engine.manage_field_values全球道具允许.
使用量
通常将此用作内部编辑字段值的组件
图表。 这个例子表明,建筑工程的其中一个用途是: columnData 用于表格
在单元格中包含可内置编辑字段值输入.
const buildColumnDataForFields = (
fields,
onFieldValueUpdateSuccess,
canWriteForm
) =>
fields.map(field => ({
dataIndex: "field.id",
key: field.id,
title: field.name,
width: 250,
render: (_, user) => (
<InlineFieldValueInput
{...{ field }}
fieldValues={user.fieldValues}
resourceId={user.id}
resourceType="users"
onMutationSuccess={onFieldValueUpdateSuccess}
canManageFieldValues={canWriteForm}
/>
),
}));
6. 国家. FieldDeleteAlert
这个 FieldDeleteAlert 组件处理删除字段上的操作。 它接受
下列道具:
道具
selectedField:需要删除的字段.ownerId: 所有人的身份证明,以防所有人不是组织.resourceTypeName: 资源类型.isDeleteAlertOpen: 指定提醒是否打开的布尔状态 .isDeleting:布尔状态,表示是否正在删除字段 .handleDelete: 负责删除指定的回调函数 字段.handleAlertClose: 关闭时要执行的回调函数 警报.
使用量
import { FieldDeleteAlert } from "@biginary/neeto-fields-frontend";
const [isDeleteAlertOpen, setIsDeleteAlertOpen] = useState(false);
<FieldDeleteAlert
selectedField={field}
ownerId={formId}
resourceTypeName="submission"
isDeleteAlertOpen={isDeleteAlertOpen}
isDeleting={isDeleting}
handleDelete={handleDelete}
handleAlertClose={() => setIsDeleteAlertOpen(false)}
/>;
职能
软件包导出 neetoFieldsUtils,其中包含两个工具
函数.
1. 联合国. neetoFieldsUtils.mergeInitialValues
此函数为 Folmik 窗体构建初始值,以包围
<FieldInputs /> 组件.
参数
initialValues: 不考虑初始值对象<FieldInputs />fields: 所有取出字段的数组.
使用量
import { useFetchFields } from "@bigbinary/neeto-fields-frontend";
const {
data: { fields },
} = useFetchFields({ resourceType: "users" });
const initialValues = neetoFieldsUtils.mergeInitialValues({
initialValues: FORMIK_INITIAL_VALUES,
fields,
});
2. 联合国. neetoFieldsUtils.transformValues
此函数将 Formik 形式值转换并构建 values 对象
包括来自 <FieldInputs />。此已转换对象可以传递
页:1 onSubmit 函数.
参数
values: Formik 形成值.
使用量
import { useFetchFields } from "@bigbinary/neeto-fields-frontend";
const {
data: { fields },
} = useFetchFields({ resourceType: "users" });
<Form
formikProps={{
initialValues,
validationSchema: VALIDATION_SCHEMA,
onSubmit: values =>
onSubmit(neetoFieldsUtils.transformValues({ values, fields })),
enableReinitialize: true,
}}
>
{/* Form's children */}
</Form>;
钩子
1. 联合国. useFetchFields
这是回收所有田园的回放查询钩 .
参数
resourceType: 要获取字段的资源 类型.ownerId: 所有人的身份证明,以防所有人不是组织.
使用量
const {
data: { fields, count, activeFieldsCount, inactiveFieldsCount },
} = useFetchFields({
resourceType: "users",
ownerId: "ownerId",
});
2. 联合国. useShowField
这是用于获取一个字段细节的回放查询钩 .
参数
fieldId:获取细节的字段标识.ownerId: 所有人的身份证明,以防所有人不是组织.
使用量
const {
data: { field },
} = useShowField({ fieldId, ownerId });
3个. useCreateField
这是创建字段的回放查询钩 .
使用量
const { mutate: create } = useCreateField();
const payload = {
field: { name, kind, resourceType, ownerId, displayOrder, data },
};
create(payload);
4.四. useUpdateField
这是用于更新字段的 React 查询钩 .
使用量
const { mutate: update } = useUpdateField();
const payload = {
field: { name, kind, resourceType, ownerId, displayOrder, data },
};
update({ fieldId, payload });
5 (韩语). useDestroyField
这是删除字段的回放查询钩 .
使用量
const { mutate: delete } = useDestroyField();
delete({ fieldId })
通过 ownerId 也与有效载荷,以防所有者不是
组织.
出版指令
咨询 构建和释放软件包 关于如何出版的详细指南.
一体化
| 项目 | 综合 |
|---|---|
| 需要论坛 | : 白色 检查 标记 : |
| 必须去德士克 | : 白色 检查 标记 : |
| 需要规划 | : 白色 检查 标记 : |
| 需要切换 | : 白色 检查 标记 : |
| 需要聊天时 | : 白色 检查 标记 : |
| 需要卡尔 | : 白色 检查 标记 : |
| 需要测试 | : 白色 检查 标记 : |