import React from 'react'
import { Meta, StoryObj } from '@storybook/react'
import JsonView from '../index'
import { argTypes, largeArray } from './share'
import { stringifyForCopying } from '../utils'
type TYPE_FC = typeof JsonView
export default {
title: 'JSON View',
component: JsonView,
argTypes,
decorators: [
Story => (
)
]
} as Meta
export const Primary: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
obj: {
k1: 123,
k2: '123',
k3: false
},
arr: ['string', 123456, false, null]
}
}
}
export const DisplaySize: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
arr: ['string', 123456, false, null]
},
displaySize: true
}
}
export const SM: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
arr: ['string', 123456, false, null]
},
enableClipboard: true,
displaySize: true
},
decorators: [
Story => (
)
]
}
export const XS: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
arr: ['string', 123456, false, null]
},
enableClipboard: true,
displaySize: true
},
decorators: [
Story => (
)
]
}
export const LG: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
arr: ['string', 123456, false, null]
},
enableClipboard: true,
displaySize: true
},
decorators: [
Story => (
)
]
}
export const XL: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
arr: ['string', 123456, false, null]
},
enableClipboard: true,
displaySize: true
},
decorators: [
Story => (
)
]
}
export const BigObject: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string',
number: 123456,
boolean: false,
null: null,
Date: new Date(),
Symbol: Symbol('JSON View'),
arr: ['string', 123456, false, null],
bigObject: {
abc0: 'abc',
abc1: 'abc',
abc2: 'abc',
abc3: 'abc',
abc4: 'abc',
abc5: 'abc',
abc6: 'abc',
abc7: 'abc',
abc8: 'abc',
abc9: 'abc',
abc10: 'abc',
abc11: 'abc',
abc12: 'abc',
abc13: 'abc',
abc14: 'abc',
abc15: 'abc',
abc16: 'abc',
abc17: 'abc',
abc18: 'abc',
abc19: 'abc',
abc20: 'abc',
abc21: 'abc',
abc22: 'abc',
abc23: 'abc',
abc24: 'abc',
abc25: 'abc',
abc26: 'abc',
abc27: 'abc',
abc28: 'abc',
abc29: 'abc'
}
},
collapseObjectsAfterLength: 20
}
}
export const Array: StoryObj = {
args: {
src: ['string', 123456, false, null, { string: 'string', number: 123456, boolean: false, null: null, Date: new Date(), Symbol: Symbol('JSON View') }],
collapsed: 1
}
}
export const BigArray: StoryObj = {
args: {
src: [
'string',
123456,
false,
null,
{ string: 'string', number: 123456, boolean: false, null: null, Date: new Date(), Symbol: Symbol('JSON View') },
[
'string',
123456,
false,
'string',
123456,
false,
'string',
123456,
false,
'string',
123456,
false,
'string',
123456,
false,
'string',
123456,
false,
'string',
123456,
false,
'string',
123456,
false
]
],
collapseObjectsAfterLength: 20
}
}
export const String: StoryObj = {
args: {
src: 'string'
}
}
export const LongString: StoryObj = {
args: {
src: 'long string long string long string long string',
collapseStringsAfterLength: 20,
collapseStringMode: 'word'
}
}
export const CustomizeCollapseStringUI: StoryObj = {
args: {
src: 'long string long string long string long string',
collapseStringsAfterLength: 20,
collapseStringMode: 'word',
customizeCollapseStringUI: () => (
<>
...
>
)
}
}
export const Number: StoryObj = {
args: {
src: 12312312321
}
}
export const Null: StoryObj = {
args: {
src: null
}
}
export const Boolean: StoryObj = {
args: {
src: true
}
}
export const Undefined: StoryObj = {
args: {
src: undefined
}
}
export const Collapsed_Boolean: StoryObj = {
args: {
src: {
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
obj: {
k1: 123,
k2: '123',
k3: false
},
arr: ['string', 123456, false, null]
},
collapsed: true
},
decorators: [
Story => (
)
]
}
export const Collapsed_Number: StoryObj = {
args: {
src: {
boolean: false,
null: null,
obj: {
k1: 123,
k2: '123',
k3: false,
k4: {
k: {
k: {
k: 'k5'
}
}
}
},
arr: ['string', 123456, false, null, [123, 123, 123, [123, 123, 123]]]
},
collapsed: 2
},
decorators: [
Story => (
)
]
}
export const Collapsed_Function: StoryObj = {
args: {
src: {
boolean: false,
null: null,
obj: {
k1: 123,
k2: '123',
k3: false,
k4: {
k: {
k: {
k: 'k5'
}
}
}
},
arr: ['string', 123456, false, null, [123, 123, 123, [123, 123, 123]]],
arr2: [1, 2]
},
collapsed: params => {
if (params.depth > 3) return true
if (params.depth > 2 && params.size > 4) return true
return false
}
},
decorators: [
Story => (
)
]
}
export const CustomizeNode: StoryObj = {
args: {
editable: true,
src: {
suni: 'suni',
string: 'string',
longString: 'long string long string long string long string long string long string',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
obj: {
k1: 123,
k2: '123',
k3: false
},
arr: ['string', 123456, false, null, [1, 2, 3]]
},
customizeNode: params => {
if (params.node === 'suni') return () => suni
if (params.node === 123) return 123
if (params.indexOrName === 'obj') return { add: false, delete: false, enableClipboard: false }
if (params.node === 'string') return { edit: true, enableClipboard: false, delete: false }
if (params.indexOrName === 'arr') return { collapsed: false }
if (params.depth > 2) return { collapsed: true }
if (params.indexOrName === 'func') return { className: 'underline' }
}
},
decorators: [
Story => (
)
]
}
export const MatchesURL: StoryObj = {
args: {
src: {
string: 'string',
link: 'https://www.google.com/',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
obj: {
k1: 123,
k2: '123',
k3: false
},
arr: ['string', 123456, false, null]
},
matchesURL: true
}
}
export const CustomizeCopy: StoryObj = {
args: {
src: {
string: 'string',
link: 'https://www.google.com/',
number: 123456,
boolean: false,
null: null,
func: function () {},
Symbol: Symbol('JSON View'),
obj: {
k1: 123,
k2: '123',
k3: false
},
arr: ['string', 123456, false, null]
},
customizeCopy: (node: any) => stringifyForCopying(node, 4)
}
}
export const LargeArray: StoryObj = {
args: {
src: {
obj: {
k1: 123,
k2: '123',
k3: false
},
largeArray: largeArray
},
displaySize: true
}
}