Skip to content

Instantly share code, notes, and snippets.

@Konard
Created October 3, 2023 06:44
Show Gist options
  • Save Konard/3220b4886ccbb915645c348db4027b9d to your computer and use it in GitHub Desktop.
Save Konard/3220b4886ccbb915645c348db4027b9d to your computer and use it in GitHub Desktop.
async ({ deep, require }) => {
const React = require('react');
const { useDebounceCallback } = require('@react-hook/debounce');
const { useRef, useEffect, useState, useCallback } = React;
const { Input, SimpleGrid, Box, Button } = require('@chakra-ui/react');
const WordCloud = require('react-d3-cloud');
const { useLocalStore } = require('@deep-foundation/store/local');
const ResizeDetector = require('react-resize-detector');
const { useSpaceId, useRefAutofill } = require('@deep-foundation/deepcase');
const Min = await deep.id('@deep-foundation/rss-to-deep', 'Min');
const Max = await deep.id('@deep-foundation/rss-to-deep', 'Max');
const Address = await deep.id('@deep-foundation/rss-to-deep', 'Address');
const Query = await deep.id('@deep-foundation/rss-to-deep', 'RSSQuery');
const Subscription = await deep.id('@deep-foundation/rss-to-deep', 'RSSSubscription');
const toString = (d) => (new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString()).slice(0, -1);
const Content = React.memo(({ style, link }) => {
const { data: minmax } = deep.useDeepSubscription({
type_id: { _in: [Min, Max] }, from_id: link.id,
});
let min, max;
for (let l of minmax) {
if (l.type_id === Min) min = l
else max = l;
}
deep.useDeepSubscription({
type_id: { _in: [Query, Subscription] }, from_id: link.id,
});
const _min = new Date(min?.value?.value || (new Date()).valueOf());
const _max = new Date(max?.value?.value || (new Date()).valueOf());
const __min = toString(_min);
const __max = toString(_max);
const linkRef = useRefAutofill(link);
const saveAddress = useDebounceCallback((address) => {
if (linkRef?.current?.value) deep.update({ link_id: linkRef?.current?.id }, { value: address }, { table: 'strings' });
else deep.insert({ link_id: linkRef?.current?.id, value: address }, { table: 'strings' });
}, 1000);
deep.useDeepSubscription({
type_id: { _in: [Query, Subscription] }, from_id: link.id,
});
const queries = deep.useMinilinksSubscription({
type_id: Query, from_id: link.id,
});
const subscriptions = deep.useMinilinksSubscription({
type_id: Subscription, from_id: link.id,
});
return (<div style={{ ...style }}>
<div>min: {min?.id} {min?.value?.value} {new Date(min?.value?.value || (new Date()).valueOf())?.toISOString()}</div>
<div>max: {max?.id} {max?.value?.value} {new Date(max?.value?.value || (new Date()).valueOf())?.toISOString()}</div>
<Input
defaultValue={link?.value?.value}
onChange={(e) => {
saveAddress(e?.target?.value);
}}
placeholder="address"
size="md"
type="text"
/>
<SimpleGrid columns={2} spacing={10}>
<Box>
<Input
value={__min}
onChange={(e) => {
const t = new Date(e.target.value).valueOf();
if (min) deep.update({ link_id: min?.id }, { value: t }, { table: 'numbers' });
else deep.insert({ type_id: Min, from_id: link.id, to_id: link.id, number: { data: { value: t } } });
}}
placeholder="min"
size="md"
type="datetime-local"
/>
</Box>
<Box>
<Input
value={__max}
onChange={(e) => {
const t = new Date(e.target.value).valueOf();
if (max) deep.update({ link_id: max?.id }, { value: t }, { table: 'numbers' });
else deep.insert({ type_id: Max, from_id: link.id, to_id: link.id, number: { data: { value: t } } });
}}
placeholder="max"
size="md"
type="datetime-local"
/>
</Box>
</SimpleGrid>
<SimpleGrid columns={3} spacing={10}>
<Button size="md" onClick={() => {
deep.insert({ type_id: Query, from_id: link.id, to_id: link.id });
}}>query</Button>
<Button size="md" onClick={async () => {
deep.insert({ type_id: Subscription, from_id: link.id, to: { data: {
type_id: await deep.id('@deep-foundation/core', 'Schedule'), string: { data: { value: '* * * * *' } }
} } });
}}>subscription</Button>
<Box>
<Button size="md" width="100%" onClick={async () => {
deep.delete({
up: {
tree_id: { _eq: await deep.id('@deep-foundation/core', 'containTree') },
parent: { type_id: { _in: [Query, Subscription] }, from_id: link.id }
}
});
}}>stop</Button>
<Button size="md" width="100%" onClick={async () => {
deep.delete({ type_id: await deep.id('@deep-foundation/rss-to-deep', 'Post'), from_id: link.id });
}}>clear</Button>
<Button size="md" width="100%" onClick={async () => {
deep.insert({ type_id: await deep.id('@deep-foundation/rss-to-deep', 'Post'), from_id: link.id, to_id: link.id, string: { data: { value: 'abc def' } } });
}}>test post</Button>
</Box>
</SimpleGrid>
<SimpleGrid columns={3} spacing={10}>
<Box>
{queries?.map(l => <Box>{l?.id}</Box>)}
</Box>
<Box>
{subscriptions?.map(l => <Box>{l?.id}</Box>)}
</Box>
</SimpleGrid>
</div>);
}, () => true);
return ({ style, link }) => {
return <Content link={link} style={{ width: 500, ...style }}/>;
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment