UNPKG

@coder/backstage-plugin-coder

Version:

Create and manage Coder workspaces from Backstage

70 lines (67 loc) 2.18 kB
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