Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,38 @@ import { ContextMenuState } from '../../global.d';
import { contextMenuItemStyle, deselectUid } from '../../utils';

export function ContextMenu() {
const ctxMenuState: AppState<Partial<ContextMenuState>> = window.unigraph.getState('global/contextMenu');

const [state, setState] = React.useState(ctxMenuState.value);
const thisRef = React.useRef(null);

const handleClose = () => {
deselectUid();
ctxMenuState.setValue({ show: false });
};
const schemaMenuConstructors = [
...(window.unigraph.getState('registry/contextMenu').value[state.contextObject?.type?.['unigraph.id']] || []),
...(state.schemaMenuContent || []),
];
const [ctxMenuState, setCtxMenuState] = React.useState<AppState<Partial<ContextMenuState>>>(
window.unigraph.getState('global/contextMenu'),
);
const [state, setState] = React.useState<Partial<ContextMenuState>>(
window.unigraph.getState('global/contextMenu').value,
);

React.useMemo(() => ctxMenuState.subscribe((v) => setState(v)), []);
React.useEffect(() => {
setState(ctxMenuState.value);
ctxMenuState.subscribe((v) => setState(v));
}, [ctxMenuState]);

const objDef = window.unigraph.getNamespaceMap?.()?.[state.contextObject?.type?.['unigraph.id']];
const objCtxDef = window.unigraph.getNamespaceMap?.()?.[state.contextContextObject?.type?.['unigraph.id']];
const [schemaMenuConstructors, setSchemaMenuConstructors] = React.useState<any>(null);
const [objDef, setObjDef] = React.useState<any>(null);
const [objCtxDef, setObjCtxDef] = React.useState<any>(null);

React.useEffect(() => {
setSchemaMenuConstructors([
...(window.unigraph.getState('registry/contextMenu').value[state.contextObject?.type?.['unigraph.id']] ||
[]),
...(state.schemaMenuContent || []),
]);
setObjDef(window.unigraph.getNamespaceMap?.()?.[state.contextObject?.type?.['unigraph.id']]);
setObjCtxDef(window.unigraph.getNamespaceMap?.()?.[state.contextContextObject?.type?.['unigraph.id']]);
}, [state]);

const handleClose = React.useCallback(() => {
deselectUid();
ctxMenuState.setValue({ show: false });
}, [ctxMenuState]);

return (
<div ref={thisRef}>
Expand Down Expand Up @@ -85,7 +99,7 @@ export function ContextMenu() {
state.contextContextUid,
),
)}
{schemaMenuConstructors.length > 0 ? (
{schemaMenuConstructors !== null && schemaMenuConstructors.length > 0 ? (
<>
<Divider sx={{ margin: '4px 0px !important' }} />
{schemaMenuConstructors.map((el: any) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,27 @@ const ResultDisplay = ({ el }: any) => {
};

export function InlineSearch() {
const ctxMenuState: AppState<Partial<SearchPopupState>> = window.unigraph.getState('global/searchPopup');
const [ctxMenuState, setCtxMenuState] = React.useState<AppState<Partial<SearchPopupState>>>(
window.unigraph.getState('global/searchPopup'),
);
const [state, setState] = React.useState<Partial<SearchPopupState>>(
window.unigraph.getState('global/searchPopup').value,
);

React.useEffect(() => {
setState(ctxMenuState.value);
ctxMenuState.subscribe((v) => setState(v));
}, [ctxMenuState]);
//

const [currentAction, setCurrentAction] = React.useState(0);

const [state, setState] = React.useState(ctxMenuState.value);
const search = React.useRef(
const search = React.useCallback(
_.debounce((key: string) => {
if (key !== undefined && key.length > 1) {
window.unigraph
.getSearchResults(parseQuery(key as any) as any, 'name', 2, {
hideHidden: ctxMenuState.value.hideHidden,
hideHidden: state.hideHidden,
})
.then((res: any) => {
const resultsTop = res.top
Expand All @@ -81,11 +91,10 @@ export function InlineSearch() {
});
}
}, 200),
[state],
);

const handleClose = () => ctxMenuState.setValue({ show: false });

React.useEffect(() => ctxMenuState.subscribe((v) => setState(v)), []);
const handleClose = React.useCallback(() => ctxMenuState.setValue({ show: false }), [ctxMenuState]);

const [searchResults, setSearchResults] = React.useState<any[]>([]);
const [topResults, setTopResults] = React.useState<any[]>([]);
Expand All @@ -94,7 +103,7 @@ export function InlineSearch() {
setSearchResults([]);
setTopResults([]);
} else setCurrentAction(0);
search.current(state.search as string);
search(state.search as string);
}, [state]);

const [actionItems, setActionItems] = React.useState<any[]>([]);
Expand Down Expand Up @@ -137,7 +146,7 @@ export function InlineSearch() {
React.useEffect(() => {
if (topResults.length > 0 && topResults[0]?.name.toLowerCase().includes(state.search?.toLowerCase()))
setCurrentAction((ca: number) => Math.max(ca, (state.default || []).length));
}, [topResults, (state.default || []).length]);
}, [topResults, (state?.default || []).length]);

React.useEffect(() => {
const handler = (ev: any) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ const CalendarEventBig = ({ data, callbacks }: any) => {
<AutoDynamicView
object={new UnigraphObject(data.get('time_frame')._value)}
callbacks={callbacks}
options={{ noDrag: true, noDrop: true, noContextMenu: true, inline: true }}
options={{ noDrag: true, noDrop: true, noContextMenu: false, inline: true }}
/>
<div
style={{
Expand Down
77 changes: 41 additions & 36 deletions packages/unigraph-dev-explorer/src/pages/SearchOverlay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ const groups = [
];

function AdderComponent({ input, setInput, open, setClose, callback, summonerTooltip }: any) {
const parsedKey = input.substr(1, input.indexOf(' ') - 1);
const parsedValue = input.substr(input.indexOf(' ') + 1);
const [parsedInput, setParsedInput] = React.useState({ key: '', val: '' });

React.useEffect(() => {
setParsedInput({ key: input.substr(1, input.indexOf(' ') - 1), val: input.substr(input.indexOf(' ') + 1) });
}, [input]);

const [toAdd, setToAdd] = React.useState<any>(null);
const [adderRefs, setAdderRefs] = React.useState<any[]>([]);
const tf = React.useRef<HTMLDivElement | null>(null);
Expand All @@ -33,8 +37,8 @@ function AdderComponent({ input, setInput, open, setClose, callback, summonerToo

React.useEffect(() => {
const allAdders = window.unigraph.getState('registry/quickAdder').value;
if (allAdders[parsedKey]) {
allAdders[parsedKey].adder(parsedValue).then((res: any) => {
if (allAdders[parsedInput.key]) {
allAdders[parsedInput.key].adder(parsedInput.val).then((res: any) => {
const [object, type] = res;
window.unigraph.getSchemas().then((schemas: any) => {
try {
Expand Down Expand Up @@ -65,7 +69,7 @@ function AdderComponent({ input, setInput, open, setClose, callback, summonerToo
});
});
}
}, [input]);
}, [parsedInput]);

return (
<div>
Expand Down Expand Up @@ -99,11 +103,11 @@ function AdderComponent({ input, setInput, open, setClose, callback, summonerToo
setInput(ev.target.value);
}}
onKeyPress={async (ev) => {
if (ev.key === 'Enter' && window.unigraph.getState('registry/quickAdder').value[parsedKey]) {
if (ev.key === 'Enter' && window.unigraph.getState('registry/quickAdder').value[parsedInput.key]) {
window.unigraph
.getState('registry/quickAdder')
.value[parsedKey]?.adder(
JSON.parse(JSON.stringify(parsedValue)),
.value[parsedInput.key]?.adder(
JSON.parse(JSON.stringify(parsedInput.val)),
false,
callback,
adderRefs,
Expand All @@ -119,11 +123,13 @@ function AdderComponent({ input, setInput, open, setClose, callback, summonerToo
/>
<div>
{summonerTooltip ? <Typography>{summonerTooltip}</Typography> : []}
<Typography>{`Adding ${parsedKey} (Enter to add)`}</Typography>
<Typography>{`Adding ${parsedInput.key} (Enter to add)`}</Typography>
{toAdd || []}
<div style={{ marginTop: '32px' }}>
{window.unigraph.getState('registry/quickAdder').value[parsedKey]?.tooltip
? React.createElement(window.unigraph.getState('registry/quickAdder').value[parsedKey]?.tooltip)
{window.unigraph.getState('registry/quickAdder').value[parsedInput.key]?.tooltip
? React.createElement(
window.unigraph.getState('registry/quickAdder').value[parsedInput.key]?.tooltip,
)
: []}
</div>
</div>
Expand Down Expand Up @@ -243,31 +249,30 @@ export function SearchOverlay({ open, setClose, callback, summonerTooltip, defau
}
}, [parsed]);

const search = React.useMemo(
() =>
_.debounce((newQuery) => {
if (newQuery.length && !newQuery.startsWith('+')) {
window.unigraph
.getSearchResults(parseQuery(newQuery) as any, 'metadata', 2, {
noPrimitives: true,
})
.then((res) => {
setEntities(
res.entities?.length > 0
? res.entities.filter(
(el) =>
typeHasDynamicView(el?.type?.['unigraph.id']) &&
!['$/schema/markdown', '$/schema/subentity'].includes(
el?.type?.['unigraph.id'],
),
)
: [null],
);
});
} else {
setEntities([]);
}
}, 200),
const search = React.useCallback(
_.debounce((newQuery) => {
if (newQuery.length && !newQuery.startsWith('+')) {
window.unigraph
.getSearchResults(parseQuery(newQuery) as any, 'metadata', 2, {
noPrimitives: true,
})
.then((res) => {
setEntities(
res.entities?.length > 0
? res.entities.filter(
(el) =>
typeHasDynamicView(el?.type?.['unigraph.id']) &&
!['$/schema/markdown', '$/schema/subentity'].includes(
el?.type?.['unigraph.id'],
),
)
: [null],
);
});
} else {
setEntities([]);
}
}, 200),
[],
);

Expand Down