@coder/backstage-plugin-coder
Version:
Create and manage Coder workspaces from Backstage
70 lines (67 loc) • 2.18 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { createContext, useContext, useState } from 'react';
import { useId } from '../../hooks/hookPolyfills.esm.js';
import { useCoderWorkspacesConfig } from '../../hooks/useCoderWorkspacesConfig.esm.js';
import { useCoderWorkspacesQuery } from './useCoderWorkspacesQuery.esm.js';
import { CoderAuthFormCardWrapper } from '../CoderAuthFormCardWrapper/CoderAuthFormCardWrapper.esm.js';
const CardContext = createContext(null);
const InnerRoot = ({
children,
className,
headerContent,
queryFilter: outerFilter,
onFilterChange: onOuterFilterChange,
defaultQueryFilter = "owner:me",
readEntityData = false,
...delegatedProps
}) => {
const [innerFilter, setInnerFilter] = useState(defaultQueryFilter);
const activeFilter = outerFilter ?? innerFilter;
const workspacesConfig = useCoderWorkspacesConfig({ readEntityData });
const workspacesQuery = useCoderWorkspacesQuery({
workspacesConfig,
coderQuery: activeFilter
});
const hookId = useId();
const headerId = `${hookId}-header`;
return /* @__PURE__ */ jsx(
CardContext.Provider,
{
value: {
headerId,
workspacesQuery,
workspacesConfig,
queryFilter: activeFilter,
onFilterChange: (newFilter) => {
setInnerFilter(newFilter);
onOuterFilterChange?.(newFilter);
}
},
children: /* @__PURE__ */ jsx(
CoderAuthFormCardWrapper,
{
role: "search",
headerContent,
"aria-labelledby": headerId,
...delegatedProps,
children: /* @__PURE__ */ jsx("div", { role: "form", children })
}
)
}
);
};
function Root(props) {
const renderKey = String(props.readEntityData ?? false);
return /* @__PURE__ */ jsx(InnerRoot, { ...props }, renderKey);
}
function useWorkspacesCardContext() {
const contextValue = useContext(CardContext);
if (contextValue === null) {
throw new Error(
`Not calling ${useWorkspacesCardContext.name} from inside a ${Root.name}`
);
}
return contextValue;
}
export { CardContext, Root, useWorkspacesCardContext };
//# sourceMappingURL=Root.esm.js.map