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 } }