Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Participant name and notes limits are typed twice, in the schemas and on the participant pages

未关闭 适合新手
#705 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@bfs2021 已经在做这个了。

开始于 2026年10月28日。

  • #706 来自 @bfs2021 —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
83/100
Issue 类型
重构
描述清晰度
描述清楚
活跃度
活跃
技术栈
typescript
领域
backend, frontend

调研方向

从 src/lib/magic-compose/limits.ts 和 issue 中列出的文件开始:src/schemas/common.ts、src/schemas/commitments.ts、src/app/s/[slug]/name-message.ts、src/app/s/[slug]/participant-fields.tsx,以及 New signup 页面和对应的 schema。将参与者限制移到指定的无 import 模块,并复用现有的 signup 限制。不要让 zod 出现在参与者页面中,名称输入框也不要设置 maxLength。每项限制都只有一个来源,并且列出的 lint、typecheck、knip、test、build 和 budget 检查全部通过后,即可完成。

由索引模型根据 Issue 内容生成。

描述

enhancement good first issue pipeline:ready

What happens

The limits on what a participant can type are literals in two places each:

  • Name, 100 characters. NameSchema in src/schemas/common.ts has .max(100), and NAME_INVALID in src/app/s/[slug]/name-message.ts types "Enter your name, up to 100 characters."
  • Notes, 500 characters. The create and update schemas in src/schemas/commitments.ts each have .max(500), and the Notes field in src/app/s/[slug]/participant-fields.tsx has maxLength={500}. The sign-up dialog and the edit page both use that field.
  • Quantity, 999. Typed twice inside src/schemas/commitments.ts, and nowhere on the client.

If someone changes a limit in the schema, the participant page's message and the textarea's maxLength are left saying the old number.

The organizer's New signup form (src/app/app/(chrome)/signups/new/page.tsx) has the same kind of copies. It types minLength={2}, maxLength={120} and maxLength={2000}, while src/schemas/signups.ts already has TITLE_MAX_LENGTH and DESCRIPTION_MAX_LENGTH, plus TITLE_MIN_LENGTH, which isn't exported.

Fix, in outline

  • A new limits module. Add src/lib/participant-limits.ts with no imports at all (like src/lib/magic-compose/limits.ts), holding NAME_MAX_LENGTH = 100, NOTES_MAX_LENGTH = 500 and QUANTITY_MAX = 999.
  • Use it everywhere. Use the constants in NameSchema, both commitment schemas, NAME_INVALID (as a template string) and the Notes field. Update src/schemas/common.test.ts's 100/101 boundary test to use the constant.
  • The New signup form. Export TITLE_MIN_LENGTH, then use it with TITLE_MAX_LENGTH and DESCRIPTION_MAX_LENGTH on the form. It's a server component, so it can import from @/schemas/signups at no cost.

Watch for

  • Keep zod out of the participant pages. name-message.ts and participant-fields.tsx reach 'use client' components on /s/[slug]. The constants must not live in src/schemas or anywhere that imports zod, or zod lands in those pages' JavaScript and budgets.json fails.
  • No behaviour change. Don't add a maxLength to the name inputs: that would change what participants see, so it's a separate decision.

Done when

  • Each of these limits is a number in exactly one place: name, notes, quantity, and title and description on the New signup form.
  • pnpm budgets after pnpm build shows /s/[slug] and /s/[slug]/c/[id] unchanged.
  • pnpm lint && pnpm typecheck && pnpm knip && pnpm test pass.

Found by the pipeline's refactor scout in src/schemas and src/app/s/[slug], at a65d5eb. Checked by locating every copy and each participant module's imports. https://claude.ai/code/session_016YZ9SVWAFTJiB4Z8TyLWNA

主要语言
TypeScript
星标
19
派生
4
平均合并
23 小时 28 分钟
30 天内合并 PR
173

环境准备

  • 提供 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

richshaw/OpenSignup 的其他 Issue

查看 richshaw/OpenSignup 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。