2023-06-21 09:28:00 +00:00
|
|
|
// @ts-strict-ignore
|
2023-01-16 09:45:12 +00:00
|
|
|
import { RecursiveMenuItem } from "@dashboard/navigation/types";
|
2022-03-09 08:56:55 +00:00
|
|
|
|
2019-06-19 14:40:52 +00:00
|
|
|
import { menu } from "../../fixtures";
|
|
|
|
import { TreeOperation } from "../MenuItems";
|
2022-02-22 09:29:18 +00:00
|
|
|
import { computeRelativeTree } from "./tree";
|
|
|
|
|
2022-11-03 10:43:44 +00:00
|
|
|
const relativeOutput: RecursiveMenuItem[][] = [
|
2022-02-22 09:29:18 +00:00
|
|
|
// no moves
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves one in root
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves two in root
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// empty move
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves every
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves children
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves child outside
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves child outside and puts it in location
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves child inside
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves child inside then outside then changes index
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves item as last child and moves it up
|
|
|
|
[
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6Nw==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Accessories",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OAX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Jewelry",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "0jewelry",
|
|
|
|
level: 0,
|
|
|
|
name: "Jewelry",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OA==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Groceries",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "3groceries",
|
|
|
|
level: 0,
|
|
|
|
name: "Groceries",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQX==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Glasses",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "1glasses",
|
|
|
|
level: 0,
|
|
|
|
name: "Glasses",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
collection: null,
|
|
|
|
id: "2accessories",
|
|
|
|
level: 0,
|
|
|
|
name: "Accessories",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
__typename: "MenuItem",
|
|
|
|
category: {
|
|
|
|
__typename: "Category",
|
|
|
|
id: "Q2F0ZWdvcnk6OQ==",
|
2022-06-21 09:36:55 +00:00
|
|
|
name: "Apparel",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
children: [],
|
|
|
|
collection: null,
|
|
|
|
id: "4apparel",
|
|
|
|
level: 0,
|
|
|
|
name: "Apparel",
|
|
|
|
page: null,
|
2022-06-21 09:36:55 +00:00
|
|
|
url: null,
|
|
|
|
},
|
|
|
|
],
|
2022-02-22 09:29:18 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
const secondTestTable: TreeOperation[][] = [
|
|
|
|
// no moves
|
|
|
|
[],
|
|
|
|
// moves one in root
|
|
|
|
[{ id: "4apparel", sortOrder: -1, type: "move" }],
|
|
|
|
// moves two in root
|
|
|
|
[
|
|
|
|
{ id: "2accessories", sortOrder: 2, type: "move" },
|
2022-06-21 09:36:55 +00:00
|
|
|
{ id: "4apparel", sortOrder: -1, type: "move" },
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// empty move
|
|
|
|
[
|
|
|
|
{ id: "2accessories", sortOrder: 0, type: "move" },
|
2022-06-21 09:36:55 +00:00
|
|
|
{ id: "4apparel", sortOrder: 0, type: "move" },
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// move every
|
|
|
|
[
|
|
|
|
{ id: "2accessories", sortOrder: 1, type: "move" },
|
|
|
|
{ id: "4apparel", sortOrder: -2, type: "move" },
|
2022-06-21 09:36:55 +00:00
|
|
|
{ id: "3groceries", sortOrder: -1, type: "move" },
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves children
|
|
|
|
[
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
sortOrder: -1,
|
|
|
|
type: "move",
|
2022-06-21 09:36:55 +00:00
|
|
|
parentId: "2accessories",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves children outside
|
|
|
|
[
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
sortOrder: 3,
|
|
|
|
type: "move",
|
2022-06-21 09:36:55 +00:00
|
|
|
simulatedMove: true,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
sortOrder: 0 - 3,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves children outside and puts it in a location
|
|
|
|
[
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
sortOrder: 3,
|
|
|
|
type: "move",
|
2022-06-21 09:36:55 +00:00
|
|
|
simulatedMove: true,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
sortOrder: 2 - 3,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves child inside
|
|
|
|
[
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 2,
|
|
|
|
type: "move",
|
2022-06-21 09:36:55 +00:00
|
|
|
simulatedMove: true,
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0 - 2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves child inside, moves it and puts it back
|
|
|
|
[
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
sortOrder: 1,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
sortOrder: 1,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
sortOrder: -2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
// moves item as last child and moves it up
|
|
|
|
[
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 1,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
|
|
|
],
|
2022-02-22 09:29:18 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
const testTable: TreeOperation[][] = [
|
|
|
|
[],
|
|
|
|
[
|
|
|
|
{ id: "1glasses", parentId: "0jewelry", sortOrder: 0, type: "move" },
|
|
|
|
{
|
|
|
|
id: "2accessories",
|
|
|
|
parentId: "3groceries",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
{ id: "1glasses", parentId: "0jewelry", sortOrder: 0, type: "move" },
|
|
|
|
{
|
|
|
|
id: "2accessories",
|
|
|
|
parentId: "3groceries",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "4apparel",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
{ id: "0jewelry", sortOrder: 1, type: "move" },
|
|
|
|
{ id: "1glasses", sortOrder: 1, type: "move" },
|
|
|
|
{
|
|
|
|
id: "4apparel",
|
|
|
|
parentId: "3groceries",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "0jewelry",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{ id: "0jewelry", parentId: "1glasses", sortOrder: 0, type: "move" },
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{ id: "1glasses", sortOrder: 1, type: "move" },
|
2022-06-21 09:36:55 +00:00
|
|
|
{ id: "0jewelry", sortOrder: 2, type: "move" },
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
{ id: "1glasses", sortOrder: 1, type: "move" },
|
|
|
|
{ id: "1glasses", parentId: "0jewelry", sortOrder: 0, type: "move" },
|
|
|
|
{ id: "0jewelry", sortOrder: 1, type: "move" },
|
|
|
|
{
|
|
|
|
id: "0jewelry",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{ id: "3groceries", sortOrder: 0, type: "move" },
|
|
|
|
{
|
|
|
|
id: "2accessories",
|
|
|
|
parentId: "3groceries",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{ id: "2accessories", sortOrder: 1, type: "move" },
|
|
|
|
{ id: "0jewelry", sortOrder: 2, type: "move" },
|
|
|
|
{ id: "1glasses", sortOrder: 3, type: "move" },
|
|
|
|
{ id: "4apparel", sortOrder: 0, type: "move" },
|
|
|
|
{ id: "1glasses", sortOrder: 1, type: "move" },
|
|
|
|
{ id: "2accessories", sortOrder: 0, type: "move" },
|
|
|
|
{
|
|
|
|
id: "4apparel",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "1glasses",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{ id: "0jewelry", sortOrder: 0, type: "move" },
|
|
|
|
{
|
|
|
|
id: "0jewelry",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "4apparel",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "0jewelry",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "0jewelry",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "1glasses",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "4apparel",
|
|
|
|
parentId: "2accessories",
|
|
|
|
sortOrder: 2,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "3groceries",
|
|
|
|
parentId: "0jewelry",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
2022-02-22 09:29:18 +00:00
|
|
|
},
|
|
|
|
{ id: "4apparel", parentId: "1glasses", sortOrder: 0, type: "move" },
|
|
|
|
{ id: "1glasses", sortOrder: 1, type: "move" },
|
|
|
|
{ id: "0jewelry", sortOrder: 1, type: "move" },
|
|
|
|
{
|
|
|
|
id: "2accessories",
|
|
|
|
parentId: "4apparel",
|
|
|
|
sortOrder: 0,
|
2022-06-21 09:36:55 +00:00
|
|
|
type: "move",
|
|
|
|
},
|
2022-02-22 09:29:18 +00:00
|
|
|
],
|
|
|
|
[{ id: "2accessories", type: "remove" }],
|
|
|
|
[
|
|
|
|
{ id: "2accessories", type: "remove" },
|
|
|
|
{ id: "4apparel", sortOrder: 0, type: "move" },
|
2022-06-21 09:36:55 +00:00
|
|
|
{ id: "3groceries", type: "remove" },
|
|
|
|
],
|
2022-02-22 09:29:18 +00:00
|
|
|
];
|
2019-06-19 14:40:52 +00:00
|
|
|
|
|
|
|
// Readability FTW
|
2022-11-03 10:43:44 +00:00
|
|
|
function innerTreeToString(tree: RecursiveMenuItem, level: number): string {
|
2019-06-19 14:40:52 +00:00
|
|
|
return (
|
|
|
|
"\n" +
|
|
|
|
"··".repeat(level) +
|
|
|
|
tree.name +
|
|
|
|
tree.children.reduce(
|
|
|
|
(acc, node) => acc + innerTreeToString(node, level + 1),
|
2022-06-21 09:36:55 +00:00
|
|
|
"",
|
2019-06-19 14:40:52 +00:00
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
2022-11-03 10:43:44 +00:00
|
|
|
function treeToString(tree: RecursiveMenuItem[]): string {
|
2019-06-19 14:40:52 +00:00
|
|
|
return tree.reduce((acc, node) => acc + innerTreeToString(node, 0), "");
|
|
|
|
}
|
|
|
|
|
|
|
|
describe("Properly computes trees", () => {
|
|
|
|
testTable.forEach(testData =>
|
|
|
|
it("#", () => {
|
2022-02-22 09:29:18 +00:00
|
|
|
const computedTree = computeRelativeTree(menu.items, testData);
|
2019-06-19 14:40:52 +00:00
|
|
|
expect(treeToString(computedTree)).toMatchSnapshot();
|
2022-06-21 09:36:55 +00:00
|
|
|
}),
|
2019-06-19 14:40:52 +00:00
|
|
|
);
|
|
|
|
});
|
2022-02-22 09:29:18 +00:00
|
|
|
|
|
|
|
describe("Properly computes relative trees", () => {
|
|
|
|
it("doesn't move anything", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[0]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[0]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves one root element", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[1]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[1]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves two root element", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[2]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[2]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("empty moves", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[3]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[3]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves every element", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[4]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[4]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves children", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[5]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[5]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves child outside", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[6]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[6]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves child outside and puts it in a location", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[7]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[7]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves child inside", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[8]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[8]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves child inside then outside then changes index", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[9]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[9]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("moves item as last child and moves it up", () => {
|
|
|
|
const computedTree = computeRelativeTree(menu.items, secondTestTable[10]);
|
|
|
|
expect(computedTree).toEqual(relativeOutput[10]);
|
|
|
|
});
|
|
|
|
});
|