← back to mibgb65-cloud__snipxn_note

Function bodies 942 total

All specs Real LLM only Function bodies
normalizeRunnerLanguage function · typescript · L58-L61 (4 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function normalizeRunnerLanguage(language: string): string | null {
  const normalizedLanguage = language.trim().toLowerCase();
  return RUNNABLE_LANGUAGE_MAP[normalizedLanguage] ?? null;
}
pickNumber function · typescript · L63-L73 (11 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function pickNumber(source: RunCodeResponse, keys: string[]): number | null {
  for (const key of keys) {
    const value = source[key];

    if (typeof value === 'number' && Number.isFinite(value)) {
      return value;
    }
  }

  return null;
}
pickString function · typescript · L75-L85 (11 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function pickString(source: RunCodeResponse, keys: string[]): string | null {
  for (const key of keys) {
    const value = source[key];

    if (typeof value === 'string' && value.trim().length > 0) {
      return value.trim();
    }
  }

  return null;
}
formatBytes function · typescript · L87-L102 (16 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function formatBytes(bytes: number): string {
  if (bytes < 1024) {
    return `${bytes} B`;
  }

  const units = ['KB', 'MB', 'GB'];
  let value = bytes / 1024;
  let unitIndex = 0;

  while (value >= 1024 && unitIndex < units.length - 1) {
    value /= 1024;
    unitIndex += 1;
  }

  return `${value.toFixed(value >= 100 ? 0 : 1)} ${units[unitIndex]}`;
}
formatDuration function · typescript · L104-L121 (18 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function formatDuration(response: RunCodeResponse | null): string {
  if (!response) {
    return '--';
  }

  const numericDuration = pickNumber(response, [
    'executionTimeMs',
    'timeMs',
    'durationMs',
    'runtimeMs',
  ]);

  if (numericDuration !== null) {
    return `${numericDuration} ms`;
  }

  return pickString(response, ['executionTime', 'duration', 'runtime']) ?? '--';
}
formatMemory function · typescript · L123-L147 (25 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function formatMemory(response: RunCodeResponse | null): string {
  if (!response) {
    return '--';
  }

  const memoryBytes = pickNumber(response, ['memoryBytes', 'memoryUsedBytes']);

  if (memoryBytes !== null) {
    return formatBytes(memoryBytes);
  }

  const memoryKb = pickNumber(response, ['memoryKb', 'memoryKB', 'memoryUsedKb']);

  if (memoryKb !== null) {
    return `${memoryKb} KB`;
  }

  const memoryMb = pickNumber(response, ['memoryMb', 'memoryMB', 'memoryUsedMb']);

  if (memoryMb !== null) {
    return `${memoryMb} MB`;
  }

  return pickString(response, ['memory', 'memoryUsed']) ?? '--';
}
resolveRunnerStatus function · typescript · L149-L165 (17 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function resolveRunnerStatus(response: RunCodeResponse): RunnerStatus {
  const status = typeof response.status === 'string' ? response.status.toLowerCase() : '';

  if (status.includes('timeout')) {
    return 'timeout';
  }

  if (status.includes('error') || status.includes('fail')) {
    return 'error';
  }

  if (typeof response.stderr === 'string' && response.stderr.trim().length > 0) {
    return 'error';
  }

  return 'success';
}
About: code-quality intelligence by Repobility · https://repobility.com
getStatusLabel function · typescript · L167-L180 (14 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function getStatusLabel(status: RunnerStatus): string {
  switch (status) {
    case 'running':
      return 'Running';
    case 'success':
      return 'Success';
    case 'error':
      return 'Error';
    case 'timeout':
      return 'Timeout';
    default:
      return 'Idle';
  }
}
getStatusColor function · typescript · L182-L195 (14 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
function getStatusColor(status: RunnerStatus): 'default' | 'success' | 'danger' | 'warning' | 'accent' {
  switch (status) {
    case 'running':
      return 'accent';
    case 'success':
      return 'success';
    case 'timeout':
      return 'warning';
    case 'error':
      return 'danger';
    default:
      return 'default';
  }
}
CodeRunnerPanel function · typescript · L197-L418 (222 LOC)
snipxn_app/src/components/note/CodeRunnerPanel.tsx
export function CodeRunnerPanel({
  isOpen,
  language,
  sourceCode,
  onOpenChange,
  onStatusChange,
}: CodeRunnerPanelProps) {
  const { showSidebar } = useDeviceType();
  const { typography } = useAppTheme();

  const [stdinExpanded, setStdinExpanded] = useState(false);
  const [stdin, setStdin] = useState('');
  const [status, setStatus] = useState<RunnerStatus>('idle');
  const [result, setResult] = useState<RunCodeResponse | null>(null);
  const [fontSize, setFontSize] = useState<number>(DEFAULT_CODE_FONT_SIZE);

  useEffect(() => {
    let isMounted = true;

    void getStoredCodeFontSize().then(value => {
      if (isMounted) {
        setFontSize(value);
      }
    });

    return () => {
      isMounted = false;
    };
  }, []);

  useEffect(() => {
    onStatusChange?.(status);
  }, [onStatusChange, status]);

  const resolvedLanguage = useMemo(() => normalizeRunnerLanguage(language), [language]);
  const stdout = typeof result?.stdout === 'string' ? result.stdout.trim() 
getErrorMessage function · typescript · L41-L52 (12 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function getErrorMessage(error: unknown, fallback: string): string {
  if (
    typeof error === 'object' &&
    error !== null &&
    'message' in error &&
    typeof error.message === 'string'
  ) {
    return translateLiteral(error.message);
  }

  return fallback;
}
toEditableTitle function · typescript · L54-L56 (3 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function toEditableTitle(title: string): string {
  return title === '无标题笔记' ? '' : title;
}
toStoredTitle function · typescript · L58-L61 (4 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function toStoredTitle(title: string): string {
  const normalizedTitle = title.trim();
  return normalizedTitle.length > 0 ? normalizedTitle : '无标题笔记';
}
normalizeLanguage function · typescript · L63-L66 (4 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function normalizeLanguage(language: string): string {
  const normalizedLanguage = language.trim();
  return normalizedLanguage.length > 0 ? normalizedLanguage : 'markdown';
}
toStoredLanguage function · typescript · L68-L71 (4 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function toStoredLanguage(language: string): string | null {
  const normalizedLanguage = normalizeLanguage(language).toLowerCase();
  return normalizedLanguage === 'markdown' ? null : normalizedLanguage;
}
Repobility · code-quality intelligence platform · https://repobility.com
formatEditorLanguageLabel function · typescript · L73-L94 (22 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function formatEditorLanguageLabel(language: string): string {
  const normalizedLanguage = normalizeLanguage(language).toLowerCase();

  switch (normalizedLanguage) {
    case 'markdown':
      return 'MD';
    case 'plaintext':
      return 'TXT';
    case 'javascript':
      return 'JS';
    case 'typescript':
      return 'TS';
    case 'python':
      return 'PY';
    case 'kotlin':
      return 'KT';
    case 'cpp':
      return 'CPP';
    default:
      return normalizedLanguage.toUpperCase();
  }
}
areStringArraysEqual function · typescript · L96-L102 (7 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function areStringArraysEqual(left: string[], right: string[]): boolean {
  if (left.length !== right.length) {
    return false;
  }

  return left.every((value, index) => value === right[index]);
}
getActivityHelperText function · typescript · L104-L128 (25 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function getActivityHelperText(
  runnerStatus: RunnerStatus,
  aiBusy: boolean,
  saving: boolean,
  isPending: boolean,
  t: (text: string) => string,
): string {
  if (aiBusy) {
    return t('AI 正在处理中');
  }

  if (runnerStatus === 'running') {
    return t('代码正在沙盒中运行');
  }

  if (saving) {
    return t('保存中...');
  }

  if (isPending) {
    return t('自动保存将在 2 秒后触发');
  }

  return t('已同步到本地');
}
mergeGeneratedContent function · typescript · L130-L142 (13 LOC)
snipxn_app/src/components/note/NoteEditorPane.tsx
function mergeGeneratedContent(currentContent: string, generatedContent: string): string {
  const trimmedGenerated = generatedContent.trim();

  if (trimmedGenerated.length === 0) {
    return currentContent;
  }

  if (currentContent.trim().length === 0) {
    return trimmedGenerated;
  }

  return `${currentContent.replace(/\s+$/, '')}\n\n${trimmedGenerated}`;
}
getErrorMessage function · typescript · L24-L35 (12 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
function getErrorMessage(error: unknown, fallback: string): string {
  if (
    typeof error === 'object' &&
    error !== null &&
    'message' in error &&
    typeof error.message === 'string'
  ) {
    return translateLiteral(error.message);
  }

  return fallback;
}
formatLanguage function · typescript · L37-L43 (7 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
function formatLanguage(language: string | null): string | null {
  if (!language) {
    return null;
  }

  return language.trim().toUpperCase();
}
formatNoteType function · typescript · L45-L66 (22 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
function formatNoteType(language: string | null): string {
  const normalizedLanguage = (language ?? 'markdown').trim().toLowerCase();

  switch (normalizedLanguage) {
    case 'markdown':
      return 'MD';
    case 'plaintext':
      return 'TXT';
    case 'javascript':
      return 'JS';
    case 'typescript':
      return 'TS';
    case 'python':
      return 'PY';
    case 'kotlin':
      return 'KT';
    case 'cpp':
      return 'CPP';
    default:
      return formatLanguage(normalizedLanguage) ?? 'NOTE';
  }
}
getUtf8ByteLength function · typescript · L68-L94 (27 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
function getUtf8ByteLength(value: string): number {
  let byteLength = 0;

  for (let index = 0; index < value.length; index += 1) {
    const codePoint = value.charCodeAt(index);

    if (codePoint <= 0x7f) {
      byteLength += 1;
      continue;
    }

    if (codePoint <= 0x7ff) {
      byteLength += 2;
      continue;
    }

    if (codePoint >= 0xd800 && codePoint <= 0xdbff) {
      byteLength += 4;
      index += 1;
      continue;
    }

    byteLength += 3;
  }

  return byteLength;
}
Repobility analyzer · published findings · https://repobility.com
formatFileSize function · typescript · L96-L106 (11 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
function formatFileSize(bytes: number): string {
  if (bytes < 1024) {
    return `${bytes} B`;
  }

  if (bytes < 1024 * 1024) {
    return `${(bytes / 1024).toFixed(bytes >= 10 * 1024 ? 0 : 1)} KB`;
  }

  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
}
formatSyncMeta function · typescript · L108-L127 (20 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
function formatSyncMeta(
  updatedAt: string,
  syncStatus: Note['syncStatus'],
  language: AppLanguage,
  t: (text: string) => string,
): string {
  if (syncStatus === 'created') {
    return t('待首次同步');
  }

  if (syncStatus === 'updated') {
    return t('待同步');
  }

  if (syncStatus === 'deleted') {
    return t('已删除');
  }

  return formatRelativeTime(updatedAt, language);
}
NoteListItem function · typescript · L129-L414 (286 LOC)
snipxn_app/src/components/note/NoteListItem.tsx
export function NoteListItem({ note, isSelected, onPress }: NoteListItemProps) {
  const { palette, typography } = useAppTheme();
  const { language, t } = useI18n();

  const { activeView, toggleStar, updateNote, deleteNote, restoreNote, permanentDeleteNote } = useNoteStore(useShallow(state => ({
    activeView: state.activeView,
    toggleStar: state.toggleStar,
    updateNote: state.updateNote,
    deleteNote: state.deleteNote,
    restoreNote: state.restoreNote,
    permanentDeleteNote: state.permanentDeleteNote,
  })));

  const folders = useFolderStore(state => state.folders);

  const [isMenuOpen, setIsMenuOpen] = useState(false);
  const [isMoveDialogOpen, setIsMoveDialogOpen] = useState(false);
  const [submitting, setSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState<string | null>(null);

  const noteTypeLabel = useMemo(() => formatNoteType(note.primaryLanguage), [note.primaryLanguage]);
  const fileSizeLabel = useMemo(() => formatFileSize(getU
getErrorMessage function · typescript · L21-L32 (12 LOC)
snipxn_app/src/components/note/NoteList.tsx
function getErrorMessage(error: unknown, fallback: string): string {
  if (
    typeof error === 'object' &&
    error !== null &&
    'message' in error &&
    typeof error.message === 'string'
  ) {
    return translateLiteral(error.message);
  }

  return fallback;
}
resolveCreateFolderId function · typescript · L34-L43 (10 LOC)
snipxn_app/src/components/note/NoteList.tsx
function resolveCreateFolderId(
  activeFolderId: string | null,
  folders: ReturnType<typeof useFolderStore.getState>['folders'],
): string | null {
  if (activeFolderId && folders.some(folder => folder.id === activeFolderId)) {
    return activeFolderId;
  }

  return folders.find(folder => folder.isDefault)?.id ?? folders[0]?.id ?? null;
}
NoteList function · typescript · L45-L285 (241 LOC)
snipxn_app/src/components/note/NoteList.tsx
export function NoteList({ showSearchHeader = true }: { showSearchHeader?: boolean }) {
  const navigation = useNavigation<any>();
  const { showSidebar } = useDeviceType();
  const { palette, typography } = useAppTheme();
  const { t } = useI18n();

  const { folders, activeFolderId, fetchFolders } = useFolderStore(useShallow(state => ({
    folders: state.folders,
    activeFolderId: state.activeFolderId,
    fetchFolders: state.fetchFolders,
  })));

  const { allNotes, loading, activeView, searchQuery, activeTagId } = useNoteStore(useShallow(state => ({
    allNotes: state.notes,
    loading: state.loading,
    activeView: state.activeView,
    searchQuery: state.searchQuery,
    activeTagId: state.activeTagId,
  })));

  const notes = useMemo(
    () => applyFilters(allNotes, searchQuery, activeTagId),
    [allNotes, searchQuery, activeTagId],
  );
  const { selectedNoteId, setSearchQuery, fetchNotes, fetchTags, createNote, selectNote } = useNoteStore(useShallow(state => ({
    se
getRuntimeEnv function · typescript · L64-L67 (4 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function getRuntimeEnv(): Record<string, string | undefined> {
  const runtime = globalThis as typeof globalThis & { process?: RuntimeProcess };
  return runtime.process?.env ?? {};
}
resolveWebBaseUrl function · typescript · L69-L79 (11 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function resolveWebBaseUrl(): string {
  const env = getRuntimeEnv();
  const configuredBaseUrl =
    env.SNIPXN_WEB_BASE_URL ?? env.WEB_BASE_URL ?? env.REACT_NATIVE_WEB_BASE_URL;

  if (configuredBaseUrl && configuredBaseUrl.trim().length > 0) {
    return configuredBaseUrl.replace(/\/+$/, '');
  }

  return API_BASE_URL.replace(/\/api\/v1\/?$/, '');
}
Citation: Repobility (2026). State of AI-Generated Code. https://repobility.com/research/
buildShareUrl function · typescript · L81-L83 (3 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function buildShareUrl(shareToken: string): string {
  return `${resolveWebBaseUrl()}/share/${shareToken}`;
}
getErrorMessage function · typescript · L85-L96 (12 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function getErrorMessage(error: unknown, fallback: string): string {
  if (
    typeof error === 'object' &&
    error !== null &&
    'message' in error &&
    typeof error.message === 'string'
  ) {
    return translateLiteral(error.message);
  }

  return fallback;
}
findTagById function · typescript · L98-L100 (3 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function findTagById(tags: Tag[], tagId: string): Tag | undefined {
  return tags.find(tag => tag.id === tagId);
}
toggleTagId function · typescript · L102-L108 (7 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function toggleTagId(tagIds: string[], tagId: string): string[] {
  if (tagIds.includes(tagId)) {
    return tagIds.filter(id => id !== tagId);
  }

  return [...tagIds, tagId];
}
formatToolbarLanguageLabel function · typescript · L110-L145 (36 LOC)
snipxn_app/src/components/note/NoteToolbar.tsx
function formatToolbarLanguageLabel(language: string): string {
  const normalizedLanguage = language.trim().toLowerCase();

  switch (normalizedLanguage) {
    case 'markdown':
      return 'MD';
    case 'plaintext':
      return 'TXT';
    case 'javascript':
      return 'JS';
    case 'typescript':
      return 'TS';
    case 'python':
      return 'PY';
    case 'kotlin':
      return 'KT';
    case 'cpp':
      return 'CPP';
    case 'json':
      return 'JSON';
    case 'yaml':
      return 'YAML';
    case 'sql':
      return 'SQL';
    case 'bash':
      return 'BASH';
    case 'go':
      return 'GO';
    case 'rust':
      return 'RUST';
    case 'java':
      return 'JAVA';
    default:
      return normalizedLanguage.length > 0 ? normalizedLanguage.toUpperCase() : 'MD';
  }
}
getErrorMessage function · typescript · L20-L31 (12 LOC)
snipxn_app/src/components/sidebar/FolderList.tsx
function getErrorMessage(error: unknown, fallback: string): string {
  if (
    typeof error === 'object' &&
    error !== null &&
    'message' in error &&
    typeof error.message === 'string'
  ) {
    return error.message;
  }

  return fallback;
}
formatFolderIcon function · typescript · L33-L35 (3 LOC)
snipxn_app/src/components/sidebar/FolderList.tsx
function formatFolderIcon(icon: string): string {
  return icon === 'folder' ? '📁' : icon;
}
isFolderEmojiIcon function · typescript · L37-L46 (10 LOC)
snipxn_app/src/components/sidebar/FolderList.tsx
function isFolderEmojiIcon(icon: string): boolean {
  const trimmedIcon = icon.trim();

  return (
    trimmedIcon.length > 0 &&
    trimmedIcon.length <= 4 &&
    !/[A-Za-z0-9]/.test(trimmedIcon) &&
    !/\s/.test(trimmedIcon)
  );
}
About: code-quality intelligence by Repobility · https://repobility.com
renderFolderGlyph function · typescript · L48-L69 (22 LOC)
snipxn_app/src/components/sidebar/FolderList.tsx
function renderFolderGlyph(
  icon: string,
  color: string,
  iconSize = SIDEBAR_LIST_ICON_SIZE,
  emojiSize = SIDEBAR_EMOJI_SIZE,
) {
  if (icon === 'folder' || !isFolderEmojiIcon(icon)) {
    return <AppIcon color={color} name="folder" size={iconSize} strokeWidth={2} />;
  }

  return (
    <Text
      style={{
        color,
        fontSize: emojiSize,
        fontWeight: '600',
        lineHeight: emojiSize + 1,
      }}>
      {formatFolderIcon(icon)}
    </Text>
  );
}
buildMovedFolderIds function · typescript · L71-L84 (14 LOC)
snipxn_app/src/components/sidebar/FolderList.tsx
function buildMovedFolderIds(folderId: string, folders: Folder[], direction: -1 | 1): string[] {
  const nextFolders = [...folders];
  const currentIndex = nextFolders.findIndex(folder => folder.id === folderId);
  const targetIndex = currentIndex + direction;

  if (currentIndex < 0 || targetIndex < 0 || targetIndex >= nextFolders.length) {
    return folders.map(folder => folder.id);
  }

  const [folder] = nextFolders.splice(currentIndex, 1);
  nextFolders.splice(targetIndex, 0, folder);

  return nextFolders.map(item => item.id);
}
resolveAvatarUri function · typescript · L28-L35 (8 LOC)
snipxn_app/src/components/sidebar/Sidebar.tsx
function resolveAvatarUri(avatar: string | null): string | null {
  if (!avatar) {
    return null;
  }

  if (/^https?:\/\//i.test(avatar)) {
    return avatar;
  }
getAvatarFallback function · typescript · L41-L44 (4 LOC)
snipxn_app/src/components/sidebar/Sidebar.tsx
function getAvatarFallback(nickname: string | null | undefined, email: string | undefined): string {
  const source = nickname?.trim() || email?.trim() || 'S';
  return source.slice(0, 1).toUpperCase();
}
formatBytes function · typescript · L46-L61 (16 LOC)
snipxn_app/src/components/sidebar/Sidebar.tsx
function formatBytes(bytes: number): string {
  if (bytes < 1024) {
    return `${bytes} B`;
  }

  const units = ['KB', 'MB', 'GB', 'TB'];
  let value = bytes / 1024;
  let unitIndex = 0;

  while (value >= 1024 && unitIndex < units.length - 1) {
    value /= 1024;
    unitIndex += 1;
  }

  return `${value.toFixed(value >= 100 ? 0 : 1)} ${units[unitIndex]}`;
}
SidebarSectionTitle function · typescript · L63-L83 (21 LOC)
snipxn_app/src/components/sidebar/Sidebar.tsx
function SidebarSectionTitle({
  title,
  collapsed,
}: {
  title: string;
  collapsed: boolean;
}) {
  const { palette, typography } = useAppTheme();

  if (collapsed) {
    return null;
  }

  return (
    <Animated.View entering={APP_FADE_IN} exiting={APP_FADE_OUT}>
      <Text className={typography.caption} style={{ color: palette.textSoft }}>
        {title}
      </Text>
    </Animated.View>
  );
}
getErrorMessage function · typescript · L30-L41 (12 LOC)
snipxn_app/src/components/sidebar/TagList.tsx
function getErrorMessage(error: unknown, fallback: string): string {
  if (
    typeof error === 'object' &&
    error !== null &&
    'message' in error &&
    typeof error.message === 'string'
  ) {
    return error.message;
  }

  return fallback;
}
resolveTagColor function · typescript · L43-L49 (7 LOC)
snipxn_app/src/components/sidebar/TagList.tsx
function resolveTagColor(color: string | null): string {
  if (color && HEX_COLOR_PATTERN.test(color)) {
    return color;
  }

  return FALLBACK_TAG_COLOR;
}
Repobility · code-quality intelligence platform · https://repobility.com
buildTagColorOptions function · typescript · L51-L59 (9 LOC)
snipxn_app/src/components/sidebar/TagList.tsx
function buildTagColorOptions(selectedColor: string) {
  const resolvedColor = resolveTagColor(selectedColor || null);

  if (TAG_COLOR_OPTIONS.some(option => option.value === resolvedColor)) {
    return TAG_COLOR_OPTIONS;
  }

  return [{ label: '当前', value: resolvedColor }, ...TAG_COLOR_OPTIONS];
}
TagList function · typescript · L61-L414 (354 LOC)
snipxn_app/src/components/sidebar/TagList.tsx
export function TagList() {
  const navigation = useNavigation<any>();
  const { palette, typography } = useAppTheme();

  const { tags, activeTagId, createTag, updateTag, deleteTag, fetchNotes, setActiveTagId, setActiveView } = useNoteStore(useShallow(state => ({
    tags: state.tags,
    activeTagId: state.activeTagId,
    createTag: state.createTag,
    updateTag: state.updateTag,
    deleteTag: state.deleteTag,
    fetchNotes: state.fetchNotes,
    setActiveTagId: state.setActiveTagId,
    setActiveView: state.setActiveView,
  })));

  const [dialogMode, setDialogMode] = useState<TagDialogMode>(null);
  const [menuTag, setMenuTag] = useState<Tag | null>(null);
  const [editingTag, setEditingTag] = useState<Tag | null>(null);
  const [nameInput, setNameInput] = useState('');
  const [colorInput, setColorInput] = useState<string>(TAG_COLOR_OPTIONS[0].value);
  const [nameTouched, setNameTouched] = useState(false);
  const [submitting, setSubmitting] = useState(false);
  const [errorM
getOAuthRedirectUri function · typescript · L8-L10 (3 LOC)
snipxn_app/src/config/oauth.ts
export function getOAuthRedirectUri(): string {
  return OAUTH_REDIRECT_URI;
}
‹ prevpage 4 / 19next ›