Skip to content

Conversation

@hwangdae
Copy link
Collaborator

@hwangdae hwangdae commented Nov 10, 2025

작업 내용

문제점 및 어려움

해결 방안

공유 사항

Summary by CodeRabbit

  • New Features

    • Added Firebase performance monitoring integration to the user app.
    • Introduced image fallback mechanism for improved loading reliability on order pages.
    • Enhanced date navigation controls in admin analytics dashboard.
  • Bug Fixes

    • Improved image display handling with automatic fallback when primary image fails to load.
  • Style

    • Refined store notice page layout with improved spacing and formatting.

@hwangdae hwangdae merged commit 54f856c into main Nov 10, 2025
2 checks passed
@github-actions github-actions bot requested a review from oriNuguri25 November 10, 2025 06:27
@coderabbitai
Copy link

coderabbitai bot commented Nov 10, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

The PR adds comprehensive infrastructure for ZIP file handling and module resolution (.pnp.cjs), integrates Firebase with performance monitoring, implements image loading fallbacks across user pages, refactors admin analytics state management for date navigation, removes deprecated map markers, and applies minor formatting updates to UI components.

Changes

Cohort / File(s) Summary
Infrastructure & Build
.pnp.cjs
Introduces extensive ZIP file handling via LibZipImpl class with synchronous/asynchronous methods, virtual filesystem abstractions through VirtualFS and ZipOpenFS, module resolution enhancements, and PatchFs patching logic for native fs module virtualization with file descriptor and path normalization support.
Firebase Integration
apps/nowait-user/package.json, apps/nowait-user/src/firebaseConfig.ts, apps/nowait-user/src/main.tsx
Adds firebase dependency (^12.5.0), creates Firebase client configuration with app initialization and performance monitoring, and logs performance module initialization on startup.
Image Loading & Hooks
apps/nowait-user/src/hooks/useFallbackImage.ts, apps/nowait-user/src/pages/order/orderSuccess/OrderSuccessPage.tsx, apps/nowait-user/src/pages/order/remittenceWait/RemittanceWaitPage.tsx
Introduces useFallbackImage hook for image preloading with load state tracking; applies fallback image mechanism to OrderSuccessPage and RemittanceWaitPage to gracefully handle image loading failures.
Admin Analytics Refactoring
apps/nowait-admin/src/pages/AdminAnalytics/AdminAnalytics.tsx, apps/nowait-admin/src/pages/AdminAnalytics/components/HeaderStatus.tsx, apps/nowait-admin/src/pages/AdminAnalytics/components/SalesCard.tsx, apps/nowait-admin/src/pages/AdminAnalytics/components/TotalSalesCard.tsx
Centralizes date state management in AdminAnalytics component; updates HeaderStatus and SalesCard public APIs to accept currentDate and onDateChange callback while removing saleDisabled prop; removes disabled prop from TotalSalesCard and simplifies its rendering logic.
UI/Layout Updates
README.md, apps/nowait-user/src/pages/waiting/boothMap/MapPage.tsx, apps/nowait-user/src/pages/waiting/storeNotice/StoreNoticePage.tsx
Fixes README formatting (space after emoji) and deployment URL; comments out BoothMarker and BoothMap rendering in MapPage; restructures StoreNoticePage layout with added top margin and separate title element.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

  • The .pnp.cjs file contains substantial infrastructure code for ZIP handling and module resolution with dense logic across multiple classes and methods; requires careful validation of patching mechanisms and file system virtualization correctness.
  • Admin analytics component refactoring involves coordinated prop changes across multiple child components with new state management patterns; requires verification of date navigation logic and prop-wiring consistency.
  • Image fallback mechanism is applied to multiple pages with a new custom hook; requires testing of image preload behavior and fallback triggering.
  • Mix of heterogeneous changes (infrastructure, Firebase setup, component refactoring, UI updates) across varied files demands separate reasoning for each cohort.

Possibly related PRs

  • feat: 오더 페이지 css 수정 #509: Modifies HeaderStatus.tsx with implementation and props changes, directly overlapping with this PR's admin analytics refactoring.
  • merge to main #348: Modifies StoreNoticePage.tsx and other nowait-user frontend files affected in this PR's layout updates.
  • Develop #384: Modifies RemittanceWaitPage.tsx, which is also updated in this PR with image fallback logic.

Suggested reviewers

  • dgKim1

Poem

🐇 ZIP files now dance in virtual streams,
Firebase keeps time with performance dreams,
Fallback images bloom when loading's slow,
Analytics dates now gracefully flow!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch develop

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f0656eb and 9c33b3c.

⛔ Files ignored due to path filters (77)
  • .yarn/cache/@firebase-ai-npm-2.5.0-081589e33e-9e75ce5d9c.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-analytics-compat-npm-0.2.25-1818b311e9-5cc2719cae.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-analytics-npm-0.10.19-14d0640766-9af9b74ad2.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-analytics-types-npm-0.8.3-f283757666-2cbc5fe842.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-check-compat-npm-0.4.0-89f56ada2d-3e171cf352.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-check-interop-types-npm-0.3.3-f14552ae0d-4a887ef5e3.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-check-npm-0.11.0-38c40a86b5-3229c02c24.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-check-types-npm-0.5.3-be7fd68af9-59af0ae698.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-compat-npm-0.5.5-addb57a9c8-8840d9b408.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-npm-0.14.5-3f5a2a7518-3b2ab9ff6a.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-app-types-npm-0.9.3-600a3cf392-02ec9a26c1.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-auth-compat-npm-0.6.1-0a0f175b8c-663dab385a.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-auth-interop-types-npm-0.2.4-1ea4afeaee-ff833bcbb4.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-auth-npm-1.11.1-67db167be7-0ccb395ac9.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-auth-types-npm-0.13.0-c358662078-a844c4a083.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-component-npm-0.7.0-3731b14e43-10e78f51a0.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-data-connect-npm-0.3.11-9f2b84302e-6aceb62164.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-database-compat-npm-2.1.0-0b035532c8-f9b29c27b0.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-database-npm-1.1.0-d513f586e7-1c7b1fb310.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-database-types-npm-1.0.16-9328a5929a-d67356cb4e.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-firestore-compat-npm-0.4.2-ced305eb3e-b9d2d9fe5c.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-firestore-npm-4.9.2-a4058c4870-8ae4dbb20c.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-firestore-types-npm-3.0.3-b1039d52e2-8196168a2d.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-functions-compat-npm-0.4.1-16bec1f309-3ad638e7e2.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-functions-npm-0.13.1-63f6d6c7d0-cf24367081.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-functions-types-npm-0.6.3-c1a53f99ed-aabd7bdd8c.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-installations-compat-npm-0.2.19-7b2222551d-666dee235b.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-installations-npm-0.6.19-38160c6dbc-c0fe4cf11f.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-installations-types-npm-0.5.3-22c29ab23b-f8af07a17e.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-logger-npm-0.5.0-8e83628405-c9bfa2381b.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-messaging-compat-npm-0.2.23-ff21efd14d-f52c46cea3.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-messaging-interop-types-npm-0.2.3-5d3483b6c1-a6fb8f02db.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-messaging-npm-0.12.23-afb2dd0c2c-6c0ca7bc41.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-performance-compat-npm-0.2.22-4e58bd1ffa-259f73da8c.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-performance-npm-0.7.9-2d0b4a8fe7-921905e236.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-performance-types-npm-0.2.3-5f97625e86-971d6bff44.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-remote-config-compat-npm-0.2.20-3d560f0610-1fbd20e927.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-remote-config-npm-0.7.0-e8db2de9cf-840904660b.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-remote-config-types-npm-0.5.0-9bedc50a90-350f9b1b5b.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-storage-compat-npm-0.4.0-cc4fc1d787-16e868afdf.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-storage-npm-0.14.0-dd709b0eef-7a210db11c.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-storage-types-npm-0.8.3-9c3a8ae5af-4b34edca4f.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-util-npm-1.13.0-f651e7fc11-2e0c19dffd.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@firebase-webchannel-wrapper-npm-1.0.5-4cdda88b49-d48c452cd6.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@grpc-grpc-js-npm-1.9.15-ff69e71e58-5bd40e1b88.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@grpc-proto-loader-npm-0.7.15-889e15aec1-514a134a72.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-aspromise-npm-1.1.2-71d00b938f-a83343a468.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-base64-npm-1.1.2-cd8ca6814a-eec925e681.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-codegen-npm-2.0.4-36e188bbe6-26ae337c56.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-eventemitter-npm-1.1.0-029cc7d431-1eb0a75180.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-fetch-npm-1.1.0-ca857b7df4-cda6a3dc2d.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-float-npm-1.0.2-5678f64d08-18f2bdede7.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-inquire-npm-1.1.0-3c7759e9ce-64372482ef.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-path-npm-1.1.2-641d08de76-cece0a938e.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-pool-npm-1.1.0-47a76f96a1-eda2718b7f.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@protobufjs-utf8-npm-1.1.0-02c590807c-a3fe31fe3f.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/@types-node-npm-24.10.0-293a9fc97d-f82ed7194e.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/cliui-npm-8.0.1-3b029092cf-4bda0f09c3.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/faye-websocket-npm-0.11.4-1f0de76de9-c6052a0bb3.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/firebase-npm-12.5.0-a32f073b35-106b407459.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-c6c7b60271.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/http-parser-js-npm-0.5.10-d8e4dc4731-8bbcf1832a.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/idb-npm-7.1.1-739f072039-72418e4397.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/lodash.camelcase-npm-4.3.0-bf268e3bf0-fcba15d21a.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/long-npm-5.3.2-f80d0f7d39-7130fe1cbc.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/protobufjs-npm-7.5.4-4d6f681551-913b676109.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/require-directory-npm-2.1.1-8608aee50b-83aa76a7bc.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/undici-types-npm-7.16.0-0e23b08124-3033e2f2b5.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/web-vitals-npm-4.2.4-b9cc74ab7d-383c9281d5.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/websocket-driver-npm-0.7.4-a72739da70-5f09547912.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/websocket-extensions-npm-0.1.4-be839a9e56-bbc8c23338.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-4df2842c36.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/yargs-npm-17.7.2-80b62638e1-ccd7e723e6.zip is excluded by !**/.yarn/**, !**/*.zip
  • .yarn/cache/yargs-parser-npm-21.1.1-8fdc003314-f84b5e4816.zip is excluded by !**/.yarn/**, !**/*.zip
  • apps/nowait-user/src/assets/orderSuccess.png is excluded by !**/*.png
  • apps/nowait-user/src/assets/remittanceWait.png is excluded by !**/*.png
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (14)
  • .pnp.cjs (20 hunks)
  • README.md (1 hunks)
  • apps/nowait-admin/src/pages/AdminAnalytics/AdminAnalytics.tsx (4 hunks)
  • apps/nowait-admin/src/pages/AdminAnalytics/components/HeaderStatus.tsx (3 hunks)
  • apps/nowait-admin/src/pages/AdminAnalytics/components/SalesCard.tsx (1 hunks)
  • apps/nowait-admin/src/pages/AdminAnalytics/components/TotalSalesCard.tsx (1 hunks)
  • apps/nowait-user/package.json (1 hunks)
  • apps/nowait-user/src/firebaseConfig.ts (1 hunks)
  • apps/nowait-user/src/hooks/useFallbackImage.ts (1 hunks)
  • apps/nowait-user/src/main.tsx (1 hunks)
  • apps/nowait-user/src/pages/order/orderSuccess/OrderSuccessPage.tsx (1 hunks)
  • apps/nowait-user/src/pages/order/remittenceWait/RemittanceWaitPage.tsx (3 hunks)
  • apps/nowait-user/src/pages/waiting/boothMap/MapPage.tsx (2 hunks)
  • apps/nowait-user/src/pages/waiting/storeNotice/StoreNoticePage.tsx (1 hunks)

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.

@coderabbitai coderabbitai bot mentioned this pull request Nov 12, 2025
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