需要轻而易举
这个 neeto-trash-nano 充当了新纳米结构,配置,数据等的真实来源.
目录
用主机应用程序开发
发动机
安装
-
将此行添加到您的应用程序的 Gemfile 中 :
source "NEETO_GEM_SERVER_URL" do # ..existing gems gem 'neeto-trash-engine' end -
然后执行:
bundle install -
将此行添加到您的应用程序
config/routes.rb文件mount NeetoTrashEngine::Engine, at: "/neeto_trash" -
在表格中添加所需的迁移
db/migrate文件夹。 运行以下命令从引擎复制迁移 到主机应用程序.bundle exec rails neeto_trash_engine:install:migrations bundle exec rails db:migrate
设置发电机
-
rails g neeto_trash_engine:install设置主机应用程序使用引擎所需的一切 :
- 挂载
NeetoTrashEngine::Engine时间/neeto_trash内config/routes.rb。 。 。 . - 副本
app/lib/neeto_trash_engine/callbacks.rb,授权 授权/组织范围决定 改为:. - 副本
config/initializers/neeto_trash_engine.rb,用于配置 保留期,当前用户解析器,以及回调类. - 添加一个
trash_cleanup条目为config/scheduled_jobs.yml运行NeetoTrashEngine::CleanupJob日报. 若为config/scheduled_jobs.yml不存在,生成器打印出要手工添加的条目,而不是 创建文件.
再次运行生成器是安全的: 它跳过目标文件已经存在或已经包含该文件的任何步骤 预期进入.
- 挂载
-
rails g neeto_trash_engine:trashable Article产生迁移( E)
db/migrate/add_neeto_trash_to_articles.rb),添加一模型需要支持的列 丢弃 :is_trashed, (中文(简体) ),trashed_at页:1trashed_by参考文献users综合索引[:is_trashed, :trashed_at]。表格名称从模型中取出,当它已经存在trashed_by引用类型匹配主机应用程序所配置的主密钥类型(例如:.:uuid) (中文(简体) ).
使用量
模式包括: NeetoTrashEngine::Trashable 可以推翻他们的删除方法.
单项删除和保留清理呼叫 permanently_delete!默认
改为 destroy!。批量删除呼叫 permanently_delete_all! 核定员额
范围。 它的默认调用 destroy_all 当一个召回停止删除时,
所以大宗交易会退回.
同步执行必须立即从垃圾堆中隐藏记录
列出并在交易完成后进行清理。 用于包括
NeetoCommonsBackend::Deletable,在两种删除路径中使用现有方法:
def permanently_delete!
destroy_async
end
def self.permanently_delete_all!
destroy_async_multiple(pluck(:id))
end
批量覆盖在一个更新中隐藏选中的记录并排队一个任务 承诺之后。 保留清理保持其每笔记录锁和资格检查.
覆盖必须保留主机模型的破坏回调和依赖性清理.
使用 destroy! 或应用程序的现有删除服务用于物理删除.
要同步删除,背景工作者必须进行这种清理.
-
用您的工程名称替换 NeetoTrashNano
创建一个
script.rb在工程根中将脚本从以下文件中粘贴. -
使用以下命令运行文件 :
ruby script.rb
页:1
- 别把文件交出来.
- 项目名称应在PascalCase中给出.
前端软件包
安装
-
添加数据
neeto-trash-frontend软件包到package.jsonyarn add @bigbinary/neeto-trash-frontend
发展指示
检查 前端软件包开发指南 分步执行 指示开发前端软件包.
使用量
-
导入后挂载垃圾页
TrashList从“ @ bigbinary/ neto- trash- prefend” 开始,并告诉它哪些项目类型 您的应用程序垃圾 :import React from "react"; import { TrashList } from "@bigbinary/neeto-trash-frontend"; const Trash = () => <TrashList itemTypes={{ Article: { label: "Articles" } }} />; export default Trash; -
将应用程序菜单中的删除动作线化, 将项目移动到垃圾堆中, 而不是硬删除 :
import { MoveToTrashAction } from "@bigbinary/neeto-trash-frontend"; <MoveToTrashAction ids={[article.id]} type="Article" onSuccess={refetchArticles} />;套件还出口
TrashBanner, (中文(简体) ),RestoreButton, (中文(简体) ),DeletePermanentlyAction,数据钩 (单位:千美元)useFetchTrashedItems, (中文(简体) ),useMoveToTrash, (中文(简体) ),useRestore, (中文(简体) ),usePermanentlyDelete, (中文(简体) ),useInvalidateTrashList, (中文(简体) ),getDaysUntilDeletion,以及QUERY_KEYS。 。 。 . -
当您从自己的端点丢弃时, 回收站页面保持同步 .
如果将项目移动到垃圾桶
MoveToTrashAction编号 :useMoveToTrash(步骤2),回收页列表和计数 自动刷新 —— 钩子会使您的垃圾查询无效, 所以没有额外的工作可做 .不过,大多数应用软件都是垃圾 拥有 删除端点代替, 因此同一请求可以运行特定应用 副作用(分析、级联)和刷新自己的清单。 这条路从不运行 包的突变,所以 垃圾页一直呆滞, 直到您自己取消其查询 。 丢弃
useInvalidateTrashList进入变异的onSuccess数字 :import { useInvalidateTrashList } from "@bigbinary/neeto-trash-frontend"; const useDestroyArticle = () => { const queryClient = useQueryClient(); const invalidateTrashList = useInvalidateTrashList(); return useMutation({ mutationFn: articlesApi.destroy, onSuccess: () => { queryClient.invalidateQueries({ queryKey: [ARTICLE_LIST] }); // your list invalidateTrashList(); // refreshes the Trash page list + counts }, }); };useInvalidateTrashList返回无效的回调QUERY_KEYS.TRASHED_ITEMS,所以你从来没有硬化代码 垃圾查询密钥 。 (内部恢复和永久删除)TrashList它本身已经失效了——这只是 用于您的移动到崩溃路径 。)
出版指令
咨询 构建和释放软件包 指南 详细介绍如何出版.