@plone/volto
Version:
Volto
238 lines (232 loc) • 6.8 kB
JSX
import ObjectBrowserWidgetDefault, {
ObjectBrowserWidgetComponent as OBC,
} from './ObjectBrowserWidget';
import Wrapper, { FormUndoWrapper } from '@plone/volto/storybook';
import React from 'react';
import UniversalLink from '@plone/volto/components/manage/UniversalLink/UniversalLink';
export const searchResults = {
items: [
{
'@id': '/front-page',
'@type': 'Document',
CreationDate: '2019-08-19T10:13:54+02:00',
Creator: 'admin',
Date: '2019-08-19T10:13:54+02:00',
Description: 'Congratulations! You have successfully installed Plone.',
EffectiveDate: 'None',
ExpirationDate: 'None',
ModificationDate: '2019-08-19T10:13:54+02:00',
Subject: [],
Title: 'Welcome to Plone',
Type: 'Page',
UID: 'd4eea28b0d53439389f6f0d647de37f7',
author_name: null,
cmf_uid: 1,
commentators: [],
created: '2019-08-19T08:13:54+00:00',
description: 'Congratulations! You have successfully installed Plone.',
effective: '1969-12-30T22:00:00+00:00',
end: null,
exclude_from_nav: false,
expires: '2499-12-30T22:00:00+00:00',
getId: 'front-page',
getObjSize: '4.6 KB',
getPath: '/Plone/front-page',
getRemoteUrl: null,
getURL: 'http://localhost:8080/Plone/front-page',
id: 'front-page',
in_response_to: null,
is_folderish: false,
last_comment_date: null,
listCreators: ['admin'],
location: null,
meta_type: 'Dexterity Item',
mime_type: 'text/plain',
modified: '2019-08-19T08:13:54+00:00',
portal_type: 'Document',
review_state: 'published',
start: null,
sync_uid: null,
title: 'Welcome to Plone',
total_comments: 0,
},
{
'@id': '/image',
'@type': 'Image',
CreationDate: '2019-08-19T10:13:54+02:00',
Creator: 'admin',
Date: '2019-08-19T10:13:54+02:00',
Description: 'This is an image',
EffectiveDate: 'None',
ExpirationDate: 'None',
ModificationDate: '2019-08-19T10:13:54+02:00',
Subject: [],
Title: 'I am an image',
Type: 'Image',
UID: 'd4eea28b0d53439389f6f0d647de37f7',
author_name: null,
cmf_uid: 1,
commentators: [],
created: '2019-08-19T08:13:54+00:00',
description: 'Congratulations! You have successfully installed Plone.',
effective: '1969-12-30T22:00:00+00:00',
end: null,
exclude_from_nav: false,
expires: '2499-12-30T22:00:00+00:00',
getId: 'image',
getObjSize: '4.6 KB',
getPath: '/Plone/image',
getRemoteUrl: null,
getURL: 'http://localhost:8080/Plone/image',
id: 'image',
in_response_to: null,
is_folderish: false,
last_comment_date: null,
listCreators: ['admin'],
location: null,
meta_type: 'Dexterity Item',
mime_type: 'text/plain',
modified: '2019-08-19T08:13:54+00:00',
portal_type: 'Image',
review_state: 'published',
start: null,
sync_uid: null,
title: 'I am an image',
total_comments: 0,
},
{
'@id': '/news',
'@type': 'Folder',
CreationDate: '2019-08-19T10:13:54+02:00',
Creator: 'admin',
Date: '2019-08-19T10:13:54+02:00',
Description: 'Site News',
EffectiveDate: 'None',
ExpirationDate: 'None',
ModificationDate: '2019-08-19T10:13:54+02:00',
Subject: [],
Title: 'News',
Type: 'Folder',
UID: 'e5e494af671d4764a6ca417ab9c2348a',
author_name: null,
cmf_uid: null,
commentators: [],
created: '2019-08-19T08:13:54+00:00',
description: 'Site News',
effective: '1969-12-30T22:00:00+00:00',
end: null,
exclude_from_nav: false,
expires: '2499-12-30T22:00:00+00:00',
getId: 'news',
getObjSize: '0 KB',
getPath: '/Plone/news',
getRemoteUrl: null,
getURL: 'http://localhost:8080/Plone/news',
id: 'news',
in_response_to: null,
is_folderish: true,
last_comment_date: null,
listCreators: ['admin'],
location: null,
meta_type: 'Dexterity Container',
mime_type: 'text/plain',
modified: '2019-08-19T08:13:54+00:00',
portal_type: 'Folder',
review_state: 'published',
start: null,
sync_uid: null,
title: 'News',
total_comments: 0,
},
],
};
const customStore = {
search: {
subrequests: {
'testBlock-multiple': searchResults,
'testBlock-link': searchResults,
'testBlock-image': searchResults,
},
},
userSession: { token: '1234' },
intl: {
locale: 'en',
messages: {},
},
};
const ObjectBrowserWidget = (args) => {
return (
<Wrapper
location={{ pathname: '/folder2/folder21/doc212' }}
customStore={customStore}
>
<FormUndoWrapper initialState={{ value: undefined }} showControls={true}>
{({ state, onChange }) => (
<>
<ObjectBrowserWidgetDefault
{...args}
id="objectBrowser"
title="Object Browser"
block="testBlock"
value={state.value}
onChange={(block, value) => onChange({ value })}
/>
<pre>
Value:
{state.value?.length > 0 && (
<UniversalLink item={state.value[0]}>
{state.value[0]['@id']}
</UniversalLink>
)}
</pre>
</>
)}
</FormUndoWrapper>
</Wrapper>
);
};
export default {
title: 'Edit Widgets/Object Browser',
argTypes: {
selectableTypes: {
name: 'widgetOptions.pattern_options.selectableTypes',
description: 'List of content type names that can be selected',
table: {
type: {
summary: 'Something short',
detail: 'Something really really long',
},
},
control: {
type: null,
},
},
},
component: OBC,
decorators: [
(Story) => (
<div style={{ width: '400px' }}>
<Story />
</div>
),
],
excludeStories: ['searchResults'],
// subcomponents: { ArgsTable },
};
export const Connected = () => <ObjectBrowserWidget />;
export const SingleElement = () => <ObjectBrowserWidget mode="link" />;
export const Placeholder = () => (
<ObjectBrowserWidget
allowExternals={true}
placeholder="This is the placeholder text"
/>
);
export const Image = () => <ObjectBrowserWidget mode="image" return="single" />;
export const InitalPath = () => <ObjectBrowserWidget initialPath="/" />;
export const SelectableType = () => (
<ObjectBrowserWidget
widgetOptions={{
pattern_options: { selectableTypes: ['Folder', 'Image', 'Event'] },
}}
/>
);