Skip to content

Commit 9575e47

Browse files
authored
Merge pull request #862 from writer/dev
chore: Merge for release
2 parents 4e104c5 + b1e3c7e commit 9575e47

26 files changed

Lines changed: 1155 additions & 3381 deletions

alfred/apps.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@ def apps_update(app: str = None):
3838
if not os.path.isdir(abs_path):
3939
continue
4040

41-
if os.path.isfile(os.path.join(abs_path, "ui.json")):
42-
print(f'{app} : migrate ui.json')
43-
wf_project.migrate_obsolete_ui_json(abs_path, {"writer_version": VERSION})
44-
4541
if not os.path.isfile(os.path.join(abs_path, ".wf", 'components-workflows_root.jsonl')):
4642
wf_project.create_default_workflows_root(abs_path)
4743

@@ -51,5 +47,5 @@ def apps_update(app: str = None):
5147
else:
5248
metadata['writer_version'] = writer.VERSION
5349
components = audit_and_fix.fix_components(components)
54-
wf_project.write_files(abs_path, metadata, components)
50+
wf_project.write_files(abs_path, metadata, components, context=wf_project.WfProjectContext(app_path=abs_path))
5551
print(f"{app} : app is up to date")

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
44

55
[tool.poetry]
66
name = "writer"
7-
version = "0.8.3rc18"
7+
version = "0.8.3rc19"
88
description = "An open-source, Python framework for building feature-rich apps that are fully integrated with the Writer platform."
99
authors = ["Writer, Inc."]
1010
readme = "README.md"

src/ui/src/builder/BuilderApp.vue

Lines changed: 65 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ const wf = inject(injectionKeys.core);
124124
const ssbm = inject(injectionKeys.builderManager);
125125
126126
const tracking = useWriterTracking(wf);
127+
const toasts = useToasts();
127128
128129
const {
129130
candidateId,
@@ -146,14 +147,20 @@ const {
146147
isCutAllowed,
147148
isDeleteAllowed,
148149
isGoToParentAllowed,
150+
isGoToChildAllowed,
151+
isGoToNextSiblingAllowed,
152+
isGoToPrevSiblingAllowed,
149153
pasteComponent,
150154
copyComponent,
151155
removeComponentsSubtree,
152156
goToParent,
157+
goToChild,
158+
goToNextSibling,
159+
goToPrevSibling,
160+
moveComponentToParent,
161+
moveComponentInsideNextSibling,
153162
} = useComponentActions(wf, ssbm, tracking);
154163
155-
const toasts = useToasts();
156-
157164
const builderMode = computed(() => ssbm.getMode());
158165
const selectedId = computed(() => ssbm.firstSelectedId.value);
159166
@@ -192,37 +199,63 @@ async function handleKeydown(ev: KeyboardEvent) {
192199
removeComponentsSubtree(...componentIds);
193200
return;
194201
}
195-
if (ev.key == "ArrowUp" && isModifierKeyActive && ev.shiftKey) {
196-
if (!isGoToParentAllowed(selectedId)) return;
197-
goToParent(selectedId, selectedInstancePath);
198-
return;
199-
}
200-
if (ev.key == "ArrowUp" && isModifierKeyActive) {
201-
moveComponentUp(selectedId);
202-
return;
203-
}
204-
if (ev.key == "ArrowDown" && isModifierKeyActive) {
205-
moveComponentDown(selectedId);
206-
return;
207-
}
208-
if (ev.key == "v" && isModifierKeyActive) {
209-
if (!isPasteAllowed(selectedId)) return;
210-
try {
211-
await pasteComponent(selectedId);
212-
} catch (error) {
213-
toasts.pushToast({ type: "error", message: String(error) });
202+
if (!isModifierKeyActive) return;
203+
204+
if (ev.shiftKey) {
205+
switch (ev.key) {
206+
case "ArrowDown":
207+
ev.preventDefault();
208+
if (isGoToNextSiblingAllowed(selectedId))
209+
goToNextSibling(selectedId);
210+
break;
211+
case "ArrowUp":
212+
ev.preventDefault();
213+
if (isGoToPrevSiblingAllowed(selectedId))
214+
goToPrevSibling(selectedId);
215+
break;
216+
case "ArrowLeft":
217+
ev.preventDefault();
218+
if (isGoToParentAllowed(selectedId))
219+
goToParent(selectedId, selectedInstancePath);
220+
break;
221+
case "ArrowRight":
222+
ev.preventDefault();
223+
if (isGoToChildAllowed(selectedId)) goToChild(selectedId);
224+
break;
225+
}
226+
} else {
227+
switch (ev.key) {
228+
case "ArrowDown":
229+
ev.preventDefault();
230+
moveComponentDown(selectedId);
231+
break;
232+
case "ArrowUp":
233+
ev.preventDefault();
234+
moveComponentUp(selectedId);
235+
break;
236+
case "ArrowLeft":
237+
ev.preventDefault();
238+
moveComponentToParent(selectedId);
239+
break;
240+
case "ArrowRight":
241+
ev.preventDefault();
242+
moveComponentInsideNextSibling(selectedId);
243+
break;
244+
case "v":
245+
if (!isPasteAllowed(selectedId)) return;
246+
try {
247+
await pasteComponent(selectedId);
248+
} catch (error) {
249+
toasts.pushToast({ type: "error", message: String(error) });
250+
}
251+
break;
252+
case "c":
253+
if (isCopyAllowed(selectedId)) copyComponent(selectedId);
254+
break;
255+
case "x":
256+
if (isCutAllowed(selectedId)) cutComponent(selectedId);
257+
break;
214258
}
215-
return;
216-
}
217-
if (ev.key == "c" && isModifierKeyActive) {
218-
if (!isCopyAllowed(selectedId)) return;
219-
copyComponent(selectedId);
220-
return;
221-
}
222-
if (ev.key == "x" && isModifierKeyActive) {
223-
if (!isCutAllowed(selectedId)) return;
224-
cutComponent(selectedId);
225-
return;
226259
}
227260
}
228261

0 commit comments

Comments
 (0)