feat(editor): Migrate pinData mixin to usePinnedData composable (no-changelog) (#8207)

## Summary
Required as part of NodeView refactoring:
- Migrates `pinData` mixin to `usePinnedData` composable.
- Adds `useActiveNode` and `useNodeType` composables 

## Related tickets and issues
https://linear.app/n8n/issue/N8N-6355/pindata

## Review / Merge checklist
- [x] PR title and summary are descriptive. **Remember, the title
automatically goes into the changelog. Use `(no-changelog)` otherwise.**
([conventions](https://github.com/n8n-io/n8n/blob/master/.github/pull_request_title_conventions.md))
- [x] [Docs updated](https://github.com/n8n-io/n8n-docs) or follow-up
ticket created.
- [x] Tests included.
> A bug is not considered fixed, unless a test is added to prevent it
from happening again.
   > A feature is not complete without tests.
This commit is contained in:
Alex Grozav
2024-01-04 11:22:56 +02:00
committed by GitHub
parent f4092a9e49
commit b50d8058cf
21 changed files with 678 additions and 92 deletions

View File

@@ -193,7 +193,7 @@
<script lang="ts">
import { defineAsyncComponent, defineComponent, nextTick } from 'vue';
import { mapStores } from 'pinia';
import { mapStores, storeToRefs } from 'pinia';
import type {
Endpoint,
@@ -255,7 +255,6 @@ import { useMessage } from '@/composables/useMessage';
import { useToast } from '@/composables/useToast';
import { workflowHelpers } from '@/mixins/workflowHelpers';
import { workflowRun } from '@/mixins/workflowRun';
import { type PinDataSource, pinData } from '@/mixins/pinData';
import NodeDetailsView from '@/components/NodeDetailsView.vue';
import ContextMenu from '@/components/ContextMenu/ContextMenu.vue';
@@ -372,6 +371,7 @@ import { getConnectorPaintStyleData, OVERLAY_ENDPOINT_ARROW_ID } from '@/utils/n
import { useViewStacks } from '@/components/Node/NodeCreator/composables/useViewStacks';
import { useExternalHooks } from '@/composables/useExternalHooks';
import { useClipboard } from '@/composables/useClipboard';
import { usePinnedData } from '@/composables/usePinnedData';
interface AddNodeOptions {
position?: XYPosition;
@@ -394,7 +394,7 @@ export default defineComponent({
CanvasControls,
ContextMenu,
},
mixins: [genericHelpers, moveNodeWorkflow, workflowHelpers, workflowRun, debounceHelper, pinData],
mixins: [genericHelpers, moveNodeWorkflow, workflowHelpers, workflowRun, debounceHelper],
async beforeRouteLeave(to, from, next) {
if (
getNodeViewTab(to) === MAIN_HEADER_TABS.EXECUTIONS ||
@@ -456,12 +456,15 @@ export default defineComponent({
}
},
setup(props, ctx) {
const ndvStore = useNDVStore();
const externalHooks = useExternalHooks();
const locale = useI18n();
const contextMenu = useContextMenu();
const dataSchema = useDataSchema();
const nodeHelpers = useNodeHelpers();
const clipboard = useClipboard();
const { activeNode } = storeToRefs(ndvStore);
const pinnedData = usePinnedData(activeNode);
return {
locale,
@@ -470,6 +473,7 @@ export default defineComponent({
nodeHelpers,
externalHooks,
clipboard,
pinnedData,
...useCanvasMouseSelect(),
...useGlobalLinkActions(),
...useTitleChange(),
@@ -799,7 +803,7 @@ export default defineComponent({
setTimeout(() => {
void this.usersStore.showPersonalizationSurvey();
this.addPinDataConnections(this.workflowsStore.getPinData || ({} as IPinData));
this.addPinDataConnections(this.workflowsStore.pinnedWorkflowData || ({} as IPinData));
}, 0);
});
@@ -1675,7 +1679,7 @@ export default defineComponent({
this.nodeHelpers.disableNodes(nodes, true);
},
togglePinNodes(nodes: INode[], source: PinDataSource) {
togglePinNodes(nodes: INode[], source: 'keyboard-shortcut' | 'context-menu') {
if (!this.editAllowedCheck()) {
return;
}
@@ -1687,13 +1691,14 @@ export default defineComponent({
);
for (const node of nodes) {
const pinnedDataForNode = usePinnedData(node);
if (nextStatePinned) {
const dataToPin = this.dataSchema.getInputDataWithPinned(node);
if (dataToPin.length !== 0) {
this.setPinData(node, dataToPin, source);
pinnedDataForNode.setData(dataToPin, source);
}
} else {
this.unsetPinData(node, source);
pinnedDataForNode.unsetData(source);
}
}
@@ -3769,7 +3774,7 @@ export default defineComponent({
data: ITaskData[] | null;
waiting: boolean;
}) {
const pinData = this.workflowsStore.getPinData;
const pinData = this.workflowsStore.pinnedWorkflowData;
if (pinData?.[name]) return;
@@ -4394,7 +4399,8 @@ export default defineComponent({
const node = tempWorkflow.nodes[nodeNameTable[nodeName]];
try {
this.setPinData(node, data.pinData[nodeName], 'add-nodes');
const pinnedDataForNode = usePinnedData(node);
pinnedDataForNode.setData(data.pinData[nodeName], 'add-nodes');
pinDataSuccess = true;
} catch (error) {
pinDataSuccess = false;