@gentbajko/slopify 3.6.3 → 3.7.0
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/edge/http/projects.js +25 -1
- package/dist/extension/slopify-studio-chrome.zip +0 -0
- package/dist/extension/slopify-studio-firefox.zip +0 -0
- package/dist/patch-notes/3.7.0.md +8 -0
- package/dist/patch-notes/index.json +6 -0
- package/dist/web/assets/index-CfRLi2K6.js +310 -0
- package/dist/web/assets/{pdf-JGOPFmA1.js → pdf-CWEGa9YC.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/index-J8vymPif.js +0 -310
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { zValidator } from "@hono/zod-validator";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
+
import { transact } from "../../kernel/db/tx.js";
|
|
4
5
|
import { derive, progressOf } from "../../kernel/runner/graph.js";
|
|
5
6
|
import { listProjects, projectById, projectTrashed, runDraftSchema, stageStandingsByProject, stagesOf, } from "../../slices/admission/repo.js";
|
|
6
7
|
import { defaultChannelId } from "../../slices/channels/model.js";
|
|
7
|
-
import { projectChannels } from "../../slices/channels/repo.js";
|
|
8
|
+
import { channelById, projectChannels, setProjectChannel } from "../../slices/channels/repo.js";
|
|
8
9
|
import { withProjectControl } from "../../slices/control/lock.js";
|
|
9
10
|
import { stagesWithEta } from "../../slices/eta/view.js";
|
|
10
11
|
import { videoActivity } from "../../slices/rebuild/activity.js";
|
|
@@ -115,6 +116,29 @@ export function projectRoutes(deps) {
|
|
|
115
116
|
})
|
|
116
117
|
// Moves the project to the trash (Settings → Trash) for 30 days; removing it for good is
|
|
117
118
|
// Delete now there, or the daily purge (`slices/trash`).
|
|
119
|
+
// Moves projects to another channel: one from its page, or every one the Projects list
|
|
120
|
+
// shows at once (a search like "ground." and Move).
|
|
121
|
+
.post("/move-channel", zValidator("json", z
|
|
122
|
+
.object({
|
|
123
|
+
projectIds: z.array(z.string().min(1).max(64)).min(1).max(2000),
|
|
124
|
+
channelId: z.string().min(1).max(64),
|
|
125
|
+
})
|
|
126
|
+
.strict(), onInvalid), (c) => {
|
|
127
|
+
const { projectIds, channelId } = c.req.valid("json");
|
|
128
|
+
if (channelById(deps.db, channelId) === undefined)
|
|
129
|
+
return problem(c, {
|
|
130
|
+
status: 404,
|
|
131
|
+
title: titleOf(404),
|
|
132
|
+
detail: "That channel no longer exists. Reload the page and pick one from the list, or make it again in Channels.",
|
|
133
|
+
});
|
|
134
|
+
const live = new Set(listProjects(deps.db).map((project) => project.id));
|
|
135
|
+
const moving = [...new Set(projectIds)].filter((id) => live.has(id));
|
|
136
|
+
transact(deps.db, () => {
|
|
137
|
+
for (const id of moving)
|
|
138
|
+
setProjectChannel(deps.db, id, channelId);
|
|
139
|
+
});
|
|
140
|
+
return c.json({ moved: moving.length, channelId });
|
|
141
|
+
})
|
|
118
142
|
.delete("/:id", zValidator("param", idParam, onInvalid), (c) => {
|
|
119
143
|
const id = c.req.valid("param").id;
|
|
120
144
|
return withProjectControl(deps.db, id, () => {
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Slopify 3.7.0
|
|
2
|
+
|
|
3
|
+
Released 4 October 2026.
|
|
4
|
+
|
|
5
|
+
## Projects by channel
|
|
6
|
+
|
|
7
|
+
- **Move projects to another channel.** In Projects, search (for example `ground.`) or pick a filter, then **Move the N shown to** a channel. A project's page has **Move to channel…** in its More menu. Nothing a project made changes; it shows in that channel's list and uses its brand and playlists.
|
|
8
|
+
- **One list per channel.** With All channels picked in the sidebar, the Projects list groups projects under each channel's name. Pick one channel in the sidebar to see only its projects.
|