Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở Phù hợp với người mới
#705 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@bfs2021 đang làm issue này rồi.

Từ ngày 28/10/2026.

  • #706 của @bfs2021 — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
83/100
Loại issue
Tái cấu trúc
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
typescript
Lĩnh vực
backend, frontend

Hướng nghiên cứu

Bắt đầu với src/lib/magic-compose/limits.ts và các tệp được nêu trong issue: src/schemas/common.ts, src/schemas/commitments.ts, src/app/s/[slug]/name-message.ts, src/app/s/[slug]/participant-fields.tsx, cùng trang New signup và schema của trang đó. Chuyển các giới hạn của người tham gia vào mô-đun được chỉ định, không có import, và tái sử dụng các giới hạn signup hiện có. Không đưa zod vào các trang người tham gia và để các ô nhập tên không có maxLength. Hoàn tất khi mỗi giới hạn chỉ có một nguồn và các bước kiểm tra lint, typecheck, knip, test, build và budget được liệt kê đều đạt.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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

Ngôn ngữ chính
TypeScript
Star
19
Fork
4
Merge trung bình
22 giờ 46 phút
Pull request đã merge (30 ngày)
170

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của richshaw/OpenSignup

Tất cả issue của richshaw/OpenSignup

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.