Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Allow canvas to programmatically allow/reject incoming and outgoing nodes #2

Closed
prevwong opened this issue Jun 4, 2019 · 0 comments

Comments

@prevwong
Copy link
Owner

prevwong commented Jun 4, 2019

Canvas needs to be able to check whether the incoming/outgoing component is allowed.

Current proposal:

<Canvas
  incoming={(node: Node, children: Array<Node>) => {
    // Logic happens here
    if (node.name === "Button") {
      const count = children.filter(child => child.name === "Button").length;
      if (count > 3) { // too many buttons in container already
        return false; 
      }
    }
    return true;
  }}
  outgoing={(node: Node, children: Array<Node>) => {
    // Logic happens here
    if (node.name === "Button") {
      const count = children.filter(child => child.name === "Button").length;
      if (count <= 1) { // too few buttons, so prevent current button from being moved out
        return false; 
      }
    }
    return true;
  }}
>
...
</Canvas>
prevwong added a commit that referenced this issue Jul 1, 2019
prevwong added a commit that referenced this issue Jul 1, 2019
prevwong added a commit that referenced this issue Jul 1, 2019
prevwong added a commit that referenced this issue Jul 1, 2019
@prevwong prevwong closed this as completed Jul 1, 2019
mresposito added a commit that referenced this issue Apr 27, 2020
* improve unit tests setup, refactor and move some unit tests. Also add a callback for nodes

* add pull request template

* add unit tests for frame, improve handling of frame
prevwong added a commit that referenced this issue May 16, 2020
* Add prepush hook, some small nits to the craft project setup (#1)

* add test staged

* add prepush hook

* Add onStateChanged hook (#2)

* improve unit tests setup, refactor and move some unit tests. Also add a callback for nodes

* add pull request template

* add unit tests for frame, improve handling of frame

* Editor state get & set (#3)

* Adds nodes state get and set methods

* Fixes over-shadowing bug

* Add private @candulabs scope for release

* Switches whole repo to point to @candulabs fork

* Updates tests

* Bumps up core version

* Update README.md

Adds warning about using this fork instead of official release

* Sync changes from main repo (#4)

* add test staged

* add prepush hook

* run prettier

* change unit test matcher

* ignore Canvas root id test

Caused by Subscriber, to be fixed

* v0.1.0-beta.4

* Update contributing

* update naming

* update version number

* package naming

Co-authored-by: Prev Wong <prevwong@gmail.com>

* Adds github workflow (#5)

* Adds test workflow

* Fixes shell linter

* Refactors flow to use node step

* Adds build step

* Corrects dep version

* Removes bad dependency

* Fixes potential case sensitive typo

* Configures lerna version

* Reset fork versions for lerna

* v0.1.5

* Adds optional publish step

* Adds better name to workflow

* Removes redundant job name

* Improves naming further

* Actions - second attempt (#6)

* Adds test workflow

* Fixes shell linter

* Refactors flow to use node step

* Adds build step

* Corrects dep version

* Removes bad dependency

* Fixes potential case sensitive typo

* Configures lerna version

* Reset fork versions for lerna

* v0.1.5

* Adds optional publish step

* Adds better name to workflow

* Removes redundant job name

* Improves naming further

* Introduces split workflow

* v0.1.6

* Adds npmrc

* Moves env to job level

* v0.1.7

* Sync changes from main repo (#8)

* add test staged

* add prepush hook

* run prettier

* change unit test matcher

* ignore Canvas root id test

Caused by Subscriber, to be fixed

* v0.1.0-beta.4

* Update contributing

* fix: allow Subscriber to collect state when created (#52)

* fix: add types for subscriber

* docs: update styling

* docs: fix typos

* docs: add example for drop indicator colours

* chore: add open collective

* docs: add layers gif

* chore: update README

* docs: fix Frame props description

Co-authored-by: Michele Riccardo Esposito <mresposito5@gmail.com>
Co-authored-by: Prev Wong <prevwong@gmail.com>

* v0.1.8

* expose use node context (#9)

* v0.1.9

* Rewrite actions.delete and actions.add plus unit tests (#10)

* tidy up the style inside actions

* add unit tests for action

* improve actions.add and actions.delete functions

* fix drag selection

* v0.1.10

* Refactor event handler to add more unit tests and make it more readable (#11)

* couple small style improvements

* refactor event handlers

* sort the query methods by name

* v0.1.11

* Local development with yalc (#12)

* Adds setup for local development with yalc

* Adds nodemon config file to npmignore

* v0.1.12

* Parse entire tree when dropping a node (#13)

* change query to create and parse a tree, small code style nits

* parse an entire tree from jsx instead of just a single node

* implement adding the tree recursively

* fix dropping shadow

* improve the renderNode function to render nodes among children if there are any

* prevent nodes from being stripped from state if they are not in a canvas node

* v0.1.13

* Adds check if resolver has isCanvas set (#14)

* v0.1.14

* fix: use Subscriber to handle onStateChange (#15)

* v0.1.15

* add enzyme deps

* pr review

* feat: Improvements to PR-69 (#72)

* Add parseNodeFromNodeData method in query, deprecate query.createNode (#18)

* rename query.createNode to query.parseNodeFromReactNode

* refactor transformJSXToNode and create node

* some light refactoring for readibiliyt

* try up the code

* add a couple unit tests, fix some small bugs

* fix fromEntries on node
# Conflicts:
#	packages/core/src/render/Frame.tsx
#	packages/core/src/render/tests/Frame.test.tsx
#	packages/utils/src/tests/History.test.ts

* fix: remove support for adding child nodes in non-Canvas

This will be added when the Element component is introduced

* fix: resetting parent nodes, re-added support for childCanvas

* chore: move event() to utils

* feat: PR improvements

* chore: rename SerialisedNodeData

* chore

* nit

Co-authored-by: Michele Riccardo Esposito <mresposito5@gmail.com>

Co-authored-by: Mateusz Drulis <mateusz.drulis@gmail.com>
Co-authored-by: Prev Wong <prevwong@gmail.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Prev Wong <prevwong@icloud.com>
prevwong added a commit that referenced this issue Jun 12, 2020
* Add prepush hook, some small nits to the craft project setup (#1)

* add test staged

* add prepush hook

* Add onStateChanged hook (#2)

* improve unit tests setup, refactor and move some unit tests. Also add a callback for nodes

* add pull request template

* add unit tests for frame, improve handling of frame

* Editor state get & set (#3)

* Adds nodes state get and set methods

* Fixes over-shadowing bug

* Add private @candulabs scope for release

* Switches whole repo to point to @candulabs fork

* Updates tests

* Bumps up core version

* Update README.md

Adds warning about using this fork instead of official release

* Sync changes from main repo (#4)

* add test staged

* add prepush hook

* run prettier

* change unit test matcher

* ignore Canvas root id test

Caused by Subscriber, to be fixed

* v0.1.0-beta.4

* Update contributing

* update naming

* update version number

* package naming

Co-authored-by: Prev Wong <prevwong@gmail.com>

* Adds github workflow (#5)

* Adds test workflow

* Fixes shell linter

* Refactors flow to use node step

* Adds build step

* Corrects dep version

* Removes bad dependency

* Fixes potential case sensitive typo

* Configures lerna version

* Reset fork versions for lerna

* v0.1.5

* Adds optional publish step

* Adds better name to workflow

* Removes redundant job name

* Improves naming further

* Actions - second attempt (#6)

* Adds test workflow

* Fixes shell linter

* Refactors flow to use node step

* Adds build step

* Corrects dep version

* Removes bad dependency

* Fixes potential case sensitive typo

* Configures lerna version

* Reset fork versions for lerna

* v0.1.5

* Adds optional publish step

* Adds better name to workflow

* Removes redundant job name

* Improves naming further

* Introduces split workflow

* v0.1.6

* Adds npmrc

* Moves env to job level

* v0.1.7

* Sync changes from main repo (#8)

* add test staged

* add prepush hook

* run prettier

* change unit test matcher

* ignore Canvas root id test

Caused by Subscriber, to be fixed

* v0.1.0-beta.4

* Update contributing

* fix: allow Subscriber to collect state when created (#52)

* fix: add types for subscriber

* docs: update styling

* docs: fix typos

* docs: add example for drop indicator colours

* chore: add open collective

* docs: add layers gif

* chore: update README

* docs: fix Frame props description

Co-authored-by: Michele Riccardo Esposito <mresposito5@gmail.com>
Co-authored-by: Prev Wong <prevwong@gmail.com>

* v0.1.8

* expose use node context (#9)

* v0.1.9

* Rewrite actions.delete and actions.add plus unit tests (#10)

* tidy up the style inside actions

* add unit tests for action

* improve actions.add and actions.delete functions

* fix drag selection

* v0.1.10

* Refactor event handler to add more unit tests and make it more readable (#11)

* couple small style improvements

* refactor event handlers

* sort the query methods by name

* v0.1.11

* Local development with yalc (#12)

* Adds setup for local development with yalc

* Adds nodemon config file to npmignore

* v0.1.12

* Parse entire tree when dropping a node (#13)

* change query to create and parse a tree, small code style nits

* parse an entire tree from jsx instead of just a single node

* implement adding the tree recursively

* fix dropping shadow

* improve the renderNode function to render nodes among children if there are any

* prevent nodes from being stripped from state if they are not in a canvas node

* v0.1.13

* Adds check if resolver has isCanvas set (#14)

* v0.1.14

* fix: use Subscriber to handle onStateChange (#15)

* v0.1.15

* add enzyme deps

* pr review

* feat: add deprecation util

* feat: add normaliser to createNode/transformJSX

* feat: refactor actions

* feat: refactor rendering

* feat: deprecate Canvas with Element

* cleanup

* fix: render node bug when node deleted

* fix tests

* fix: remove timeout hack

* feat: deprecate adding array of Nodes

* fix: simplify RenderNode

* nit: cleanup unused vars

* nit: remove comments

* chore: add yalc

* fix: Element rehydration

* chore: refactor parseNodeDataFromJSX

* fix: api scheme

* chore: remove capture/debounce handlers

* chore: handle deprecated _childNodes

* chore: hidden => isHidden

* chore: _childCanvas => linkedNodes

* nit: cleanup

* feat: add hydrationTimestamp

* chore: cleanup

* nit: rename Tree => NodeTree

* fix: deprecate decendants

* feat: move connectors to context

* fix: RenderNode

* fix: deserialisation

* feat: update hooks exposed actions

* fix: update action

* chore: cleanup

* chore: update api in test

* feat: refactor NodeHelpers

* nit: update element isCanvas => canvas

* fix: typo

* fix: NodeHelpers

* feat: refactor queries

* chore: cleanup

* fix: remove drag

* chore: update docs

* fix: remove drag

* feat: rename addTree => addNodeTree

* chore: rename onStateChange => onNodesChange

* feat: update linkednode parent

* chore: update docs

* feat: change to click event

* feat: remove id prefix and rename root node

* cleanup

* chore

* chore: remove isHidden

* chore: cleanup API

* chore: add test watch command

* chore: fix docs

* nit

* nit: cleanup

* nit: pr

* feat: deprecate craft name/defaultProps

* feat: ensure dragged element is selected

* chore: update docs

* fix: ensure events exist

* nit(layers): use updated API

* fix: existing node in element

* nit: cleanup

* nit: cleanup

Co-authored-by: Michele Riccardo Esposito <mresposito5@gmail.com>
Co-authored-by: Mateusz Drulis <mateusz.drulis@gmail.com>
Co-authored-by: GitHub Action <action@github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant