Skip to content

Conversation

@Meldiron
Copy link
Contributor

@Meldiron Meldiron commented Jan 6, 2026

What does this PR do?

Updates copy

CleanShot 2026-01-06 at 15 08 03@2x

Allows label searching

CleanShot 2026-01-06 at 15 07 08@2x

Allows to set label

CleanShot 2026-01-06 at 15 07 14@2x

Test Plan

Manual QA

Related PRs and Issues

appwrite/appwrite#11090

Have you read the Contributing Guidelines on issues?

Yes

Summary by CodeRabbit

  • New Features

    • Added project labels management: edit labels with validation, preset suggestions, and update flow
    • Search now matches labels in addition to project name and ID
  • Chores

    • Updated dependency reference for @appwrite.io/console

✏️ Tip: You can customize this high-level summary in your review settings.

@appwrite
Copy link

appwrite bot commented Jan 6, 2026

Console (appwrite/console)

Project ID: 688b7bf400350cbd60e9

Sites (1)
Site Status Logs Preview QR
 console-stage
688b7cf6003b1842c9dc
Ready Ready View Logs Preview URL QR Code

Tip

Git integration provides automatic deployments with optional PR comments

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 6, 2026

Warning

Rate limit exceeded

@Meldiron has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 5 minutes and 57 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 1b15906 and 8ce5935.

📒 Files selected for processing (1)
  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte

Walkthrough

Updates the package.json dependency URL for @appwrite.io/console. Adds a new analytics enum member ProjectUpdateLabels. Refactors project-list queries to consolidate search, common, and active filters into searchQueries, commonQueries, and activeQueries, using Query.or/Query.contains for search. Introduces a new Svelte component updateLabels.svelte for editing and validating alphanumeric project labels (with presets and SDK persistence) and renders it on the project settings page. Updates the organization search placeholder to include "label" and casts X-Appwrite-Project header values to string in two request sites.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Feat. Project labels' clearly summarizes the main feature being added - project labels functionality - which aligns with the PR objectives of adding label searching and the ability to set project labels.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI Agents
In
@src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte:
- Around line 35-41: The catch block is shadowing the component's reactive error
variable named "error"; rename the catch parameter (e.g., to "err" or
"caughtError") and update the handler to assign the reactive "error" variable
(error = err) and use that renamed variable when calling addNotification and
trackError (e.g., addNotification({ message: err.message, ... });
trackError(err, Submit.ProjectUpdateLabels);) so the component state is updated
and no shadowing occurs.
🧹 Nitpick comments (1)
src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte (1)

70-76: Consider a more robust key for re-rendering InputTags.

Using labels.length as the key won't trigger a re-render when labels are swapped or replaced 1:1 (same count). If the intent is to force re-render on any label change, consider using a more unique key.

🔎 Alternative approach
-                {#key labels.length}
+                {#key labels.join(',')}
                     <InputTags
                         id="project-labels"
                         label="Labels"
                         placeholder="Select or type project labels"
                         bind:tags={labels} />
                 {/key}
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b721ab3 and 6003039.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • package.json
  • src/lib/actions/analytics.ts
  • src/routes/(console)/organization-[organization]/+page.ts
  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{ts,tsx,js,jsx,svelte}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,js,jsx,svelte}: Import reusable modules from the src/lib directory using the $lib alias
Use minimal comments in code; reserve comments for TODOs or complex logic explanations
Use $lib, $routes, and $themes aliases instead of relative paths for module imports

Files:

  • src/lib/actions/analytics.ts
  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
  • src/routes/(console)/organization-[organization]/+page.ts
  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
**/*.ts

📄 CodeRabbit inference engine (AGENTS.md)

**/*.ts: Define types inline or in .d.ts files, avoid creating separate .types.ts files
Use TypeScript in non-strict mode; any type is tolerated in this project

Files:

  • src/lib/actions/analytics.ts
  • src/routes/(console)/organization-[organization]/+page.ts
**/*.{ts,tsx,js,jsx,svelte,json}

📄 CodeRabbit inference engine (AGENTS.md)

Use 4 spaces for indentation, single quotes, 100 character line width, and no trailing commas per Prettier configuration

Files:

  • src/lib/actions/analytics.ts
  • package.json
  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
  • src/routes/(console)/organization-[organization]/+page.ts
  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
src/routes/**/*.svelte

📄 CodeRabbit inference engine (AGENTS.md)

Use SvelteKit file conventions: +page.svelte for components, +page.ts for data loaders, +layout.svelte for wrappers, +error.svelte for error handling, and dynamic route params in square brackets like [param]

Files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
**/*.svelte

📄 CodeRabbit inference engine (AGENTS.md)

Use Svelte 5 + SvelteKit 2 syntax with TypeScript for component development

Files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
src/routes/**

📄 CodeRabbit inference engine (AGENTS.md)

Configure dynamic routes using SvelteKit convention with [param] syntax in route directory names

Files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
  • src/routes/(console)/organization-[organization]/+page.ts
  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
🧠 Learnings (12)
📚 Learning: 2025-10-07T14:16:31.893Z
Learnt from: ItzNotABug
Repo: appwrite/console PR: 2413
File: src/routes/(console)/project-[region]-[project]/databases/database-[database]/(entity)/helpers/analytics.ts:17-18
Timestamp: 2025-10-07T14:16:31.893Z
Learning: In the console codebase analytics helpers at `src/routes/(console)/project-[region]-[project]/databases/database-[database]/(entity)/helpers/analytics.ts`, the dynamically constructed enum lookups (like `Submit[enumKey as keyof typeof Submit]`) are designed to return `undefined` safely when a terminology entry doesn't exist, because the corresponding views won't be rendered in those scenarios (e.g., DocumentsDB columns/attributes have no view), so the analytics code paths won't be reached.

Applied to files:

  • src/lib/actions/analytics.ts
📚 Learning: 2025-09-26T06:48:57.938Z
Learnt from: ItzNotABug
Repo: appwrite/console PR: 2373
File: src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/empty.svelte:629-631
Timestamp: 2025-09-26T06:48:57.938Z
Learning: In the Appwrite console codebase using appwrite.io/pink-svelte, the Icon component automatically handles CSS variable names passed to its color prop by internally wrapping them with var(). Therefore, passing '--some-css-variable' as a string to the Icon color prop works correctly without needing to manually wrap it with var().

Applied to files:

  • package.json
📚 Learning: 2026-01-06T11:49:07.493Z
Learnt from: TorstenDittmann
Repo: appwrite/console PR: 2635
File: package.json:95-95
Timestamp: 2026-01-06T11:49:07.493Z
Learning: Remove the packageManager field from package.json in Bun projects. Bun does not use Corepack's packageManager setting, so keeping it can cause confusion and misleading tooling results. Apply this pattern to all package.json files in Bun-enabled environments.

Applied to files:

  • package.json
📚 Learning: 2025-11-25T03:15:27.539Z
Learnt from: CR
Repo: appwrite/console PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T03:15:27.539Z
Learning: Applies to src/routes/**/*.svelte : Use SvelteKit file conventions: +page.svelte for components, +page.ts for data loaders, +layout.svelte for wrappers, +error.svelte for error handling, and dynamic route params in square brackets like [param]

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-11-19T11:22:42.553Z
Learnt from: atharvadeosthale
Repo: appwrite/console PR: 2512
File: src/routes/(console)/project-[region]-[project]/overview/platforms/llmBanner.svelte:51-83
Timestamp: 2025-11-19T11:22:42.553Z
Learning: In src/routes/(console)/project-[region]-[project]/overview/platforms/llmBanner.svelte, the Lovable integration URL format `https://lovable.dev/` with `autosubmit` and `prompt` as query parameters (set via searchParams) is correct and functional.

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-09-30T07:41:06.679Z
Learnt from: ItzNotABug
Repo: appwrite/console PR: 2425
File: src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/empty.svelte:454-468
Timestamp: 2025-09-30T07:41:06.679Z
Learning: In `src/routes/(console)/project-[region]-[project]/databases/database-[database]/(suggestions)/empty.svelte`, the column suggestions API (console.suggestColumns) has a maximum limit of 7 columns returned, which aligns with the initial placeholder count of 7 in customColumns.

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-11-25T03:15:27.539Z
Learnt from: CR
Repo: appwrite/console PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T03:15:27.539Z
Learning: Applies to src/lib/components/**/*.svelte : Use PascalCase for component file names and place them in src/lib/components/[feature]/ directory structure

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-11-25T03:15:27.539Z
Learnt from: CR
Repo: appwrite/console PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T03:15:27.539Z
Learning: Applies to **/*.svelte : Use Svelte 5 + SvelteKit 2 syntax with TypeScript for component development

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-11-19T11:22:42.553Z
Learnt from: atharvadeosthale
Repo: appwrite/console PR: 2512
File: src/routes/(console)/project-[region]-[project]/overview/platforms/llmBanner.svelte:51-83
Timestamp: 2025-11-19T11:22:42.553Z
Learning: In src/routes/(console)/project-[region]-[project]/overview/platforms/llmBanner.svelte, the Cursor integration URL format `https://cursor.com/link/prompt` with the `text` query parameter is correct and functional.

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-09-08T13:20:47.308Z
Learnt from: ItzNotABug
Repo: appwrite/console PR: 2316
File: src/routes/(console)/project-[region]-[project]/functions/create-function/deploy/+page.svelte:29-29
Timestamp: 2025-09-08T13:20:47.308Z
Learning: The Form.svelte component in the Appwrite console creates a FormContext with isSubmitting as writable(false) and expects consumers to work with Svelte writable stores, not plain booleans.

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte
📚 Learning: 2025-10-13T05:13:54.542Z
Learnt from: ItzNotABug
Repo: appwrite/console PR: 2413
File: src/routes/(console)/project-[region]-[project]/databases/table.svelte:33-39
Timestamp: 2025-10-13T05:13:54.542Z
Learning: In Svelte 5, `import { page } from '$app/state'` provides a reactive state proxy that can be accessed directly (e.g., `page.params`), unlike the older `import { page } from '$app/stores'` which returns a readable store requiring the `$page` syntax for auto-subscription in components.

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
📚 Learning: 2025-10-05T09:41:40.439Z
Learnt from: ItzNotABug
Repo: appwrite/console PR: 2398
File: src/routes/(console)/verify-email/+page.svelte:48-51
Timestamp: 2025-10-05T09:41:40.439Z
Learning: In SvelteKit 5, `page` imported from `$app/state` is a reactive state object (using runes), not a store. It should be accessed as `page.data` without the `$` prefix, unlike the store-based `$page` from `$app/stores` in earlier versions.

Applied to files:

  • src/routes/(console)/project-[region]-[project]/settings/+page.svelte
🧬 Code graph analysis (1)
src/routes/(console)/organization-[organization]/+page.ts (1)
src/lib/stores/sdk.ts (1)
  • sdk (173-196)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: e2e
🔇 Additional comments (6)
src/lib/actions/analytics.ts (1)

250-250: LGTM!

The new ProjectUpdateLabels analytics event follows the established naming convention and is appropriately placed alongside other project-related submit events.

src/routes/(console)/project-[region]-[project]/settings/+page.svelte (2)

18-18: LGTM!

The UpdateLabels import follows the project's alias conventions using a relative path for sibling components.


89-90: LGTM!

The component placement is logical—basic project metadata (UpdateName, UpdateLabels) is grouped together before service and installation settings.

src/routes/(console)/organization-[organization]/+page.ts (1)

27-29: LGTM!

The composite search query enables users to find projects by name or by labels, supporting the new labeling feature effectively.

src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte (1)

1-103: LGTM overall!

The component is well-structured with proper:

  • Alphanumeric validation with clear user feedback
  • Suggested labels as toggleable presets
  • Disabled state logic using symmetric difference
  • Analytics tracking for success and errors
  • Cache invalidation for both PROJECT and ORGANIZATION dependencies
package.json (1)

25-25: SDK version supports the updateLabels API.

The dependency update correctly aligns with the existing UpdateLabels implementation. The codebase already uses both sdk.forConsole.projects.updateLabels() and sdk.forProject().users.updateLabels() in the project settings and user management components.

@Meldiron Meldiron merged commit d783811 into main Jan 7, 2026
4 checks passed
@Meldiron Meldiron deleted the feat-project-labels branch January 7, 2026 15:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants