MCPcopy
hub / github.com/TanStack/query / CopyButton

Function CopyButton

packages/query-devtools/src/Explorer.tsx:90–146  ·  view source on GitHub ↗
(props: { value: unknown })

Source from the content-addressed store, hash-verified

88
89type CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy'
90const CopyButton = (props: { value: unknown }) => {
91 const theme = useTheme()
92 const css = useQueryDevtoolsContext().shadowDOMTarget
93 ? goober.css.bind({ target: useQueryDevtoolsContext().shadowDOMTarget })
94 : goober.css
95 const styles = createMemo(() => {
96 return theme() === 'dark' ? darkStyles(css) : lightStyles(css)
97 })
98 const [copyState, setCopyState] = createSignal<CopyState>('NoCopy')
99
100 return (
101 <button
102 class={styles().actionButton}
103 title="Copy object to clipboard"
104 aria-label={`${
105 copyState() === 'NoCopy'
106 ? 'Copy object to clipboard'
107 : copyState() === 'SuccessCopy'
108 ? 'Object copied to clipboard'
109 : 'Error copying object to clipboard'
110 }`}
111 onClick={
112 copyState() === 'NoCopy'
113 ? () => {
114 navigator.clipboard.writeText(stringify(props.value)).then(
115 () => {
116 setCopyState('SuccessCopy')
117 setTimeout(() => {
118 setCopyState('NoCopy')
119 }, 1500)
120 },
121 (err) => {
122 console.error('Failed to copy: ', err)
123 setCopyState('ErrorCopy')
124 setTimeout(() => {
125 setCopyState('NoCopy')
126 }, 1500)
127 },
128 )
129 }
130 : undefined
131 }
132 >
133 <Switch>
134 <Match when={copyState() === 'NoCopy'}>
135 <Copier />
136 </Match>
137 <Match when={copyState() === 'SuccessCopy'}>
138 <CopiedCopier theme={theme()} />
139 </Match>
140 <Match when={copyState() === 'ErrorCopy'}>
141 <ErrorCopier />
142 </Match>
143 </Switch>
144 </button>
145 )
146}
147

Callers

nothing calls this directly

Calls 4

useThemeFunction · 0.90
useQueryDevtoolsContextFunction · 0.90
darkStylesFunction · 0.70
lightStylesFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…