MCPcopy Create free account
hub / github.com/anomalyco/opencode / FileTree

Function FileTree

packages/app/src/components/file-tree.tsx:193–506  ·  view source on GitHub ↗
(props: {
  path: string
  class?: string
  nodeClass?: string
  active?: string
  level?: number
  allowed?: readonly string[]
  modified?: readonly string[]
  kinds?: ReadonlyMap<string, Kind>
  draggable?: boolean
  onFileClick?: (file: FileNode) => void

  _filter?: Filter
  _marks?: Set<string>
  _deeps?: Map<string, number>
  _kinds?: ReadonlyMap<string, Kind>
  _chain?: readonly string[]
})

Source from the content-addressed store, hash-verified

191}
192
193export default function FileTree(props: {
194 path: string
195 class?: string
196 nodeClass?: string
197 active?: string
198 level?: number
199 allowed?: readonly string[]
200 modified?: readonly string[]
201 kinds?: ReadonlyMap<string, Kind>
202 draggable?: boolean
203 onFileClick?: (file: FileNode) => void
204
205 _filter?: Filter
206 _marks?: Set<string>
207 _deeps?: Map<string, number>
208 _kinds?: ReadonlyMap<string, Kind>
209 _chain?: readonly string[]
210}) {
211 const file = useFile()
212 const level = props.level ?? 0
213 const draggable = () => props.draggable ?? true
214
215 const key = (p: string) =>
216 file
217 .normalize(p)
218 .replace(/[\\/]+$/, "")
219 .replaceAll("\\", "/")
220 const chain = props._chain ? [...props._chain, key(props.path)] : [key(props.path)]
221
222 const filter = createMemo(() => {
223 if (props._filter) return props._filter
224
225 const allowed = props.allowed
226 if (!allowed) return
227
228 const files = new Set(allowed)
229 const dirs = new Set<string>()
230
231 for (const item of allowed) {
232 const parts = item.split("/")
233 const parents = parts.slice(0, -1)
234 for (const [idx] of parents.entries()) {
235 const dir = parents.slice(0, idx + 1).join("/")
236 if (dir) dirs.add(dir)
237 }
238 }
239
240 return { files, dirs }
241 })
242
243 const marks = createMemo(() => {
244 if (props._marks) return props._marks
245
246 const out = new Set<string>()
247 for (const item of props.modified ?? []) out.add(item)
248 for (const item of props.kinds?.keys() ?? []) out.add(item)
249 if (out.size === 0) return
250 return out

Callers

nothing calls this directly

Calls 15

filterFunction · 0.85
dirsToExpandFunction · 0.85
shouldListRootFunction · 0.85
parentFunction · 0.85
leafFunction · 0.85
draggableFunction · 0.85
deepFunction · 0.85
kindTextColorFunction · 0.85
stateMethod · 0.80
pushMethod · 0.80
keyFunction · 0.70
pushFunction · 0.70

Tested by

no test coverage detected