MCPcopy Create free account
hub / github.com/TanStack/query / CopyButton

Function CopyButton

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

Source from the content-addressed store, hash-verified

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

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