Compare commits

..

32 Commits

Author SHA1 Message Date
louiscklaw
9f7624fa56 "Add initial .gitconfig with user info, HTTP settings, branch defaults, and core preferences" 2025-06-13 12:23:29 +08:00
louiscklaw
346992d4ec Update requirement files with new feature templates and fix backend API error message, along with mobile project config updates and documentation improvements 2025-06-13 12:11:47 +08:00
louiscklaw
f23a6b7d9c "update service port documentation with subdomain information and add new feature requirements" 2025-06-13 12:10:44 +08:00
louiscklaw
ebc8a81641 "add docker compose up/down scripts and update vite config for production environment" 2025-06-11 18:49:28 +08:00
louiscklaw
f487427b2c "update service port configuration and docker setup" 2025-06-11 12:37:22 +08:00
louiscklaw
cc4d035f97 update documentation, 2025-06-08 22:26:41 +08:00
louiscklaw
84b223ff60 update, 2025-06-08 19:08:45 +08:00
louiscklaw
fca048074e update public folder, 2025-06-08 19:08:41 +08:00
louiscklaw
bc35e25616 update demo-sliding-profile, 2025-06-08 19:08:01 +08:00
louiscklaw
15f8d2e6aa update demo-shop-app-ui, 2025-06-08 19:08:01 +08:00
louiscklaw
592a099f7b update demo-score-board, 2025-06-08 19:08:01 +08:00
louiscklaw
4c1b30e5c6 update demo-restaurant-finder, 2025-06-08 19:08:00 +08:00
louiscklaw
c765bb49a4 update demo-recipe-app, 2025-06-08 19:08:00 +08:00
louiscklaw
9aeb58379d update demo-react-travel-app, 2025-06-08 19:08:00 +08:00
louiscklaw
6419567005 update demo-react-tabs-menus-custom, 2025-06-08 19:07:48 +08:00
louiscklaw
e2076fe67b update demo-react-switch-tabs, 2025-06-08 19:07:48 +08:00
louiscklaw
766720e075 update demo-react-shop-ui, 2025-06-08 19:07:48 +08:00
louiscklaw
19af60c410 update demo-react-shop, 2025-06-08 19:07:48 +08:00
louiscklaw
ed95621b2f update demo-react-quotes, 2025-06-08 19:07:48 +08:00
louiscklaw
2258fd8fb9 update demo-react-overlay-hooks, 2025-06-08 19:07:48 +08:00
louiscklaw
0f674badd9 update demo-react-onboarding-ui, 2025-06-08 19:07:48 +08:00
louiscklaw
bc731ea2b8 update demo-react-notes, 2025-06-08 19:07:48 +08:00
louiscklaw
c11dba6297 update demo-react-movie-app-with-algolia, 2025-06-08 19:07:38 +08:00
louiscklaw
b9fbe4e476 update demo-react-marvel-app, 2025-06-08 19:07:38 +08:00
louiscklaw
0d844eed3f update demo-react-login, 2025-06-08 19:07:38 +08:00
louiscklaw
2862cddb6b update demo-react-lifecycles, 2025-06-08 19:07:38 +08:00
louiscklaw
55509b483c update demo-react-item-list, 2025-06-08 19:07:38 +08:00
louiscklaw
3f2ac2a285 update demo-react-hook-form-example, 2025-06-08 19:07:38 +08:00
louiscklaw
1216de4ff9 update demo-react-drawing-canvas, 2025-06-08 19:07:29 +08:00
louiscklaw
7966d8abf5 update demo-react-calculator, 2025-06-08 19:07:29 +08:00
louiscklaw
e975aebfcd update demo-react-add-to-cart, 2025-06-08 19:07:29 +08:00
louiscklaw
7f6970b183 update demo-quote-app, 2025-06-08 19:07:29 +08:00
3264 changed files with 227169 additions and 8457 deletions

19
.gitconfig Normal file
View File

@@ -0,0 +1,19 @@
[user]
email = louiscklaw@users.noreply.github.com
name = louiscklaw
[http]
version = HTTP/1.1
postBuffer = 5368709120
[init]
defaultBranch = master
[core]
autocrlf = false
[pull]
ff = only
rebase = true
[lfs]
allowincompletepush = true
locksverify = true
[credential]
autoDetectTimeout = -1
helper = cache --timeout=2592000

View File

@@ -77,12 +77,12 @@ const Chat = () => {
const [toastMessage, setToastMessage] = useState("");
// Refs
const contentRef = useRef();
const contentRef = useRef(null);
const swiperRefs = useRef([]);
const textareaRef = useRef();
const sideRef = useRef();
const sendRef = useRef();
const replyToAnimationRef = useRef();
const textareaRef = useRef(null);
const sideRef = useRef(null);
const sendRef = useRef(null);
const replyToAnimationRef = useRef(null);
const actionSheetButtons = [
{
@@ -104,7 +104,7 @@ const Chat = () => {
icon: alertOutline,
handler: () =>
toaster(
"I haven't implemented unsend :) Simple store update though",
"I haven't implemented unsend :) Simple store update though"
),
},
{
@@ -165,11 +165,11 @@ const Chat = () => {
const chatMessageID = elementID.includes("chatText")
? parseInt(elementID.replace("chatText_", ""))
: elementID.includes("chatTime")
? parseInt(elementID.replace("chatTime_", ""))
: parseInt(elementID.replace("chatBubble_", ""));
? parseInt(elementID.replace("chatTime_", ""))
: parseInt(elementID.replace("chatBubble_", ""));
const chatMessage = chat.filter(
(message) => parseInt(message.id) === parseInt(chatMessageID),
(message) => parseInt(message.id) === parseInt(chatMessageID)
)[0];
setActionMessage(chatMessage);
@@ -278,7 +278,7 @@ const Chat = () => {
replyToMessage,
replyToMessage ? replyToMessage.id : false,
image,
imagePath,
imagePath
);
setMessage("");
@@ -329,7 +329,7 @@ const Chat = () => {
fill="clear"
onClick={() =>
toaster(
"As this is a UI only, video calling wouldn't work here.",
"As this is a UI only, video calling wouldn't work here."
)
}
>
@@ -352,7 +352,7 @@ const Chat = () => {
{chat.map((message, index) => {
const repliedMessage = chat.filter(
(subMessage) =>
parseInt(subMessage.id) === parseInt(message.replyID),
parseInt(subMessage.id) === parseInt(message.replyID)
)[0];
return (
@@ -360,7 +360,9 @@ const Chat = () => {
ref={(ref) => (swiperRefs.current[index] = ref)}
id={`chatBubble_${message.id}`}
key={index}
className={`chat-bubble ${message.sent ? "bubble-sent" : "bubble-received"}`}
className={`chat-bubble ${
message.sent ? "bubble-sent" : "bubble-received"
}`}
{...longPressEvent}
>
<div id={`chatText_${message.id}`}>

View File

@@ -22,7 +22,7 @@ import { useRef } from "react";
import ContactModal from "../components/ContactModal";
const Chats = () => {
const pageRef = useRef();
const pageRef = useRef(null);
const contacts = ContactStore.useState(getContacts);
const latestChats = ChatStore.useState(getChats);
@@ -43,7 +43,7 @@ const Chats = () => {
contacts
.filter((c) => c.id === chat.contact_id)[0]
.name.toLowerCase()
.includes(searchTermLower),
.includes(searchTermLower)
);
setResults(newResults);
} else {

View File

@@ -0,0 +1,21 @@
---
tags: mobile
---
# REQ0119-Demo2FaExample
## description
A demonstration of two-factor authentication implementation examples
## schema
```dbml
{
// To be defined
}
```
## related
-

View File

@@ -0,0 +1,21 @@
---
tags:
---
# REQ0120-PlaceholderFeature
## description
T.B.A.
## schema
```dbml
{
// To be defined
}
```
## related
-

View File

@@ -0,0 +1,21 @@
---
tags:
---
# REQ0121-UserProfileFeature
## description
T.B.A.
## schema
```dbml
{
// To be defined
}
```
## related
-

View File

@@ -0,0 +1,21 @@
---
tags:
---
# REQ0122-NotificationSystem
## description
T.B.A.
## schema
```dbml
{
// To be defined
}
```
## related
-

View File

@@ -0,0 +1,21 @@
---
tags:
---
# REQ0123-AnalyticsDashboard
## description
T.B.A.
## schema
```dbml
{
// To be defined
}
```
## related
-

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0124-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0125-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0126-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0127-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0128-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0129-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: [placeholder-tag1, placeholder-tag2]
---
# REQ0130-PlaceholderTitle
## description
![alt text](placeholder-image.png)
## schema
```dbml
{
placeholderField1: Type;
placeholderField2: Type;
}
```
## related
[[REQXXXX]]

View File

@@ -0,0 +1,22 @@
---
tags: requirements
---
# REQ0131-DemoInstagramClone
## description
<Party Page.png>
## schema
```dbml
// Add your DBML here
Table users {
id integer
}
```
## related
[[REQ0110-PartyPage]]

View File

@@ -0,0 +1,23 @@
---
tags: requirements
---
# REQ0132-DemoKanbanBoard
## description
<Kanban Board.png>
## schema
```dbml
// Add your DBML here
Table tasks {
id integer
status string
}
```
## related
[[REQ0131-DemoInstagramClone]]

View File

@@ -0,0 +1,23 @@
---
tags: requirements
---
# REQ0133-DemoList
## description
<Demo List.png>
## schema
```dbml
// Add your DBML here
Table lists {
id integer
name string
}
```
## related
[[REQ0132-DemoKanbanBoard]]

View File

@@ -0,0 +1,23 @@
---
tags: requirements
---
# REQ0134-DemoOrderingApp
## description
<Ordering App.png>
## schema
```dbml
// Add your DBML here
Table orders {
id integer
item string
}
```
## related
[]

View File

@@ -0,0 +1,24 @@
---
tags: requirements
---
# REQ0135-DemoPinterestFloatingTabBar
## description
<Pinterest Floating Tab Bar.png>
## schema
```dbml
// Add your DBML here
Table floating_tab_bars {
id integer
position string
items json
}
```
## related
[[REQ0134-DemoList]]

View File

@@ -0,0 +1,24 @@
---
tags: requirements
---
# REQ0136-DemoProfileExample
## description
<Profile Example.png>
## schema
```dbml
// Add your DBML here
Table profiles {
id integer
name string
avatar_url string
}
```
## related
[[REQ0135-DemoPinterestFloatingTabBar]]

View File

@@ -0,0 +1,24 @@
---
tags: [requirements]
---
# REQ0137-DemoPullstateTutorial
## Description
![Pullstate Tutorial](Pullstate%20Tutorial.png)
## Schema
```dbml
// Add your DBML here
Table pullstates {
id integer
state json
timestamp datetime
}
```
## Related
- [REQ0136-DemoProfileExample](#)

View File

@@ -0,0 +1,24 @@
---
tags: [requirements]
---
# REQ0138-DemoQrScanner
## Description
![QR Scanner](QR%20Scanner.png)
## Schema
```dbml
// Add your DBML here
Table qr_scanners {
id integer
scan_data string
scan_time datetime
}
```
## Related
- [REQ0137-DemoPullstateTutorial](#)

View File

@@ -0,0 +1,24 @@
---
tags: [requirements]
---
# REQ0139-DemoQuizApp
## Description
![Quiz App](Quiz%20App.png)
## Schema
```dbml
// Add your DBML here
Table quizzes {
id integer
questions json
results json
}
```
## Related
- [REQ0138-DemoQrScanner](#)

View File

@@ -0,0 +1,25 @@
---
tags: [requirements]
---
# REQ0140-DemoQuoteApp
## Description
![Quote App](Quote%20App.png)
## Schema
```dbml
// Add your DBML here
Table quotes {
id integer
content string
author string
category string
}
```
## Related
- [REQ0139-DemoQuizApp](#)

View File

@@ -0,0 +1,25 @@
---
tags: [requirements]
---
# REQ0141-DemoReactAddToCart
## Description
![React Add To Cart](React%20Add%20To%20Cart.png)
## Schema
```dbml
// Add your DBML here
Table cart_items {
id integer
product_id integer
quantity integer
user_id integer
}
```
## Related
- [REQ0140-DemoQuoteApp](#)

View File

@@ -0,0 +1,25 @@
---
tags: [requirements]
---
# REQ0142-DemoReactCalculator
## Description
![React Calculator](React%20Calculator.png)
## Schema
```dbml
// Add your DBML here
Table calculations {
id integer
expression string
result float
timestamp datetime
}
```
## Related
- [REQ0141-DemoReactAddToCart](#)

View File

@@ -0,0 +1,25 @@
---
tags: [requirements]
---
# REQ0143-DemoReactDrawingCanvas
## Description
![React Drawing Canvas](React%20Drawing%20Canvas.png)
## Schema
```dbml
// Add your DBML here
Table drawings {
id integer
canvas_data json
created_at datetime
updated_at datetime
}
```
## Related
- [REQ0142-DemoReactCalculator](#)

View File

@@ -0,0 +1,25 @@
---
tags: [requirements]
---
# REQ0144-DemoReactHookFormExample
## Description
![React Hook Form Example](React%20Hook%20Form%20Example.png)
## Schema
```dbml
// Add your DBML here
Table forms {
id integer
form_data json
submitted_at datetime
user_id integer
}
```
## Related
- [REQ0143-DemoReactDrawingCanvas](#)

View File

@@ -0,0 +1,26 @@
---
tags: [requirements]
---
# REQ0145-DemoReactItemList
## Description
![React Item List](React%20Item%20List.png)
## Schema
```dbml
// Add your DBML here
Table items {
id integer
name string
description text
price decimal
created_at datetime
}
```
## Related
- [REQ0144-DemoReactHookFormExample](#)

View File

@@ -0,0 +1,26 @@
---
tags: [requirements]
---
# REQ0146-DemoReactLifecycles
## Description
![React Lifecycles](React%20Lifecycles.png)
## Schema
```dbml
// Add your DBML here
Table components {
id integer
name string
lifecycle_stage string
mounted_at datetime
updated_at datetime
}
```
## Related
- [REQ0145-DemoReactItemList](#)

View File

@@ -0,0 +1,26 @@
---
tags: [requirements]
---
# REQ0147-DemoReactLogin
## Description
![React Login](React%20Login.png)
## Schema
```dbml
// Add your DBML here
Table users {
id integer
username string
password_hash string
last_login_at datetime
login_count integer
}
```
## Related
- [REQ0146-DemoReactLifecycles](#)

View File

@@ -0,0 +1,26 @@
---
tags: [requirements]
---
# REQ0148-DemoReactMarvelApp
## Description
![React Marvel App](React%20Marvel%20App.png)
## Schema
```dbml
// Add your DBML here
Table characters {
id integer
name string
description text
thumbnail_url string
comics_available integer
}
```
## Related
- [REQ0147-DemoReactLogin](#)

View File

@@ -0,0 +1,27 @@
---
tags: [requirements]
---
# REQ0149-DemoReactMovieAppWithAlgolia
## Description
![React Movie App with Algolia](React%20Movie%20App%20with%20Algolia.png)
## Schema
```dbml
// Add your DBML here
Table movies {
id integer
title string
year integer
rating decimal
search_index string
last_updated datetime
}
```
## Related
- [REQ0148-DemoReactMarvelApp](#)

View File

@@ -0,0 +1,27 @@
---
tags: [requirements]
---
# REQ0150-DemoReactNotes
## Description
![React Notes App](React%20Notes%20App.png)
## Schema
```dbml
// Add your DBML here
Table notes {
id integer
title string
content text
created_at datetime
updated_at datetime
is_pinned boolean
}
```
## Related
- [REQ0149-DemoReactMovieAppWithAlgolia](#)

View File

@@ -0,0 +1,27 @@
---
tags: [requirements]
---
# REQ0151-DemoReactOnboardingUi
## Description
![React Onboarding UI](React%20Onboarding%20UI.png)
## Schema
```dbml
// Add your DBML here
Table onboarding_steps {
id integer
title string
description text
is_completed boolean
order_number integer
component_name string
}
```
## Related
- [REQ0150-DemoReactNotes](#)

View File

@@ -0,0 +1,26 @@
---
tags: [requirements]
---
# REQ0152-DemoReactOverlayHooks
## Description
![React Overlay Hooks](React%20Overlay%20Hooks.png)
## Schema
```dbml
// Add your DBML here
Table overlays {
id integer
component_name string
is_visible boolean
z_index integer
animation_type string
}
```
## Related
- [REQ0151-DemoReactOnboardingUi](#)

View File

@@ -0,0 +1,10 @@
---
tags: [requirements]
---
# REQ0153-DemoReactPollApp
## Description
![React Poll App](React%20Poll%20App.png)
## Schema

View File

@@ -0,0 +1 @@
# DemoReactProfileDashboardUi

View File

@@ -0,0 +1 @@
# DemoReactQuotes

View File

@@ -0,0 +1 @@
# DemoReactShop

View File

@@ -0,0 +1 @@
# DemoReactShopUi

View File

@@ -0,0 +1 @@
# DemoReactSwitchTabs

View File

@@ -0,0 +1 @@
# DemoReactTabsMenusCustom

View File

@@ -0,0 +1 @@
# DemoReactThemeSwitcher

View File

@@ -0,0 +1 @@
# DemoReactTravelApp

View File

@@ -0,0 +1 @@
# DemoRecipeApp

View File

@@ -0,0 +1 @@
# DemoRestaurantFinder

View File

@@ -0,0 +1 @@
# DemoScoreBoard

View File

@@ -0,0 +1 @@
# DemoShopAppUi

View File

@@ -0,0 +1 @@
# DemoSkeletonText

View File

@@ -0,0 +1 @@
# DemoSlidingProfile

View File

@@ -0,0 +1 @@
# DemoStickyBottomSheetExample

View File

@@ -0,0 +1 @@
# DemoStorageExample

View File

@@ -0,0 +1 @@
# DemoWeatherAppUi

View File

@@ -0,0 +1,16 @@
---
tags: docker, ports
---
# REQ0180 service port schedule
## Port Usage
| Service | Host **Port** | Container Port | Environment | Purpose | subdomain |
| ----------- | ------------- | -------------- | ----------- | -------------------------------- | ------------------------ |
| Frontend | 10001 | 8080 | All | Web application access | pa_admin.louislabs.com |
| Mobile | 10004 | 3000 | All | Mobile application access | pa_mobile.louislabs.com |
| CMS Backend | 10002 | 7272 | All | Main API access | pa_backend.louislabs.com |
| CMS Backend | 10003 | 5555 | All | Additional service access | --- |
| Postgres | - | 5432 | Production | Database access (container only) | --- |
| Postgres | 5432 | 5432 | Development | Database access | --- |

View File

@@ -105,3 +105,56 @@
- [REQ0116: REQ0116/main-tab](./REQ0116/index.md)
- [REQ0117: REQ0117/default-route](./REQ0117/index.md)
- [REQ0118: REQ0118/Not-Implemented-page](./REQ0118/index.md)
- [REQ0119: REQ0119-Demo2FaExample](./REQ0119/index.md)
- [REQ0120: REQ0120-PlaceholderFeature](./REQ0120/index.md)
- [REQ0121: REQ0121-UserProfileFeature](./REQ0121/index.md)
- [REQ0122: REQ0122-NotificationSystem](./REQ0122/index.md)
- [REQ0123: REQ0123-AnalyticsDashboard](./REQ0123/index.md)
- [REQ0124: REQ0124-PlaceholderTitle](./REQ0124/index.md)
- [REQ0125: REQ0125-PlaceholderTitle](./REQ0125/index.md)
- [REQ0126: REQ0126-PlaceholderTitle](./REQ0126/index.md)
- [REQ0127: REQ0127-PlaceholderTitle](./REQ0127/index.md)
- [REQ0128: REQ0128-PlaceholderTitle](./REQ0128/index.md)
- [REQ0129: REQ0129-PlaceholderTitle](./REQ0129/index.md)
- [REQ0130: REQ0130-PlaceholderTitle](./REQ0130/index.md)
- [REQ0131: REQ0131-DemoInstagramClone](./REQ0131/index.md)
- [REQ0132: REQ0132-DemoKanbanBoard](./REQ0132/index.md)
- [REQ0133: REQ0133-DemoList](./REQ0133/index.md)
- [REQ0134: REQ0134-DemoOrderingApp](./REQ0134/index.md)
- [REQ0135: REQ0135-DemoPinterestFloatingTabBar](./REQ0135/index.md)
- [REQ0136: REQ0136-DemoProfileExample](./REQ0136/index.md)
- [REQ0137: REQ0137-DemoPullstateTutorial](./REQ0137/index.md)
- [REQ0138: REQ0138-DemoQrScanner](./REQ0138/index.md)
- [REQ0139: REQ0139-DemoQuizApp](./REQ0139/index.md)
- [REQ0140: REQ0140-DemoQuoteApp](./REQ0140/index.md)
- [REQ0141: REQ0141-DemoReactAddToCart](./REQ0141/index.md)
- [REQ0142: REQ0142-DemoReactCalculator](./REQ0142/index.md)
- [REQ0143: REQ0143-DemoReactDrawingCanvas](./REQ0143/index.md)
- [REQ0144: REQ0144-DemoReactHookFormExample](./REQ0144/index.md)
- [REQ0145: REQ0145-DemoReactItemList](./REQ0145/index.md)
- [REQ0146: REQ0146-DemoReactLifecycles](./REQ0146/index.md)
- [REQ0147: REQ0147-DemoReactLogin](./REQ0147/index.md)
- [REQ0148: REQ0148-DemoReactMarvelApp](./REQ0148/index.md)
- [REQ0149: REQ0149-DemoReactMovieAppWithAlgolia](./REQ0149/index.md)
- [REQ0150: REQ0150-DemoReactNotes](./REQ0150/index.md)
- [REQ0151: REQ0151-DemoReactOnboardingUi](./REQ0151/index.md)
- [REQ0152: REQ0152-DemoReactOverlayHooks](./REQ0152/index.md)
- [REQ0153: REQ0153-DemoReactPollApp](./REQ0153/index.md)
- [REQ0154: DemoReactProfileDashboardUi](./REQ0154/index.md)
- [REQ0155: DemoReactQuotes](./REQ0155/index.md)
- [REQ0156: DemoReactShop](./REQ0156/index.md)
- [REQ0157: DemoReactShopUi](./REQ0157/index.md)
- [REQ0158: DemoReactSwitchTabs](./REQ0158/index.md)
- [REQ0159: DemoReactTabsMenusCustom](./REQ0159/index.md)
- [REQ0160: DemoReactThemeSwitcher](./REQ0160/index.md)
- [REQ0161: DemoReactTravelApp](./REQ0161/index.md)
- [REQ0162: DemoRecipeApp](./REQ0162/index.md)
- [REQ0163: DemoRestaurantFinder](./REQ0163/index.md)
- [REQ0164: DemoScoreBoard](./REQ0164/index.md)
- [REQ0165: DemoShopAppUi](./REQ0165/index.md)
- [REQ0166: DemoSkeletonText](./REQ0166/index.md)
- [REQ0167: DemoSlidingProfile](./REQ0167/index.md)
- [REQ0168: DemoStickyBottomSheetExample](./REQ0168/index.md)
- [REQ0169: DemoStorageExample](./REQ0169/index.md)
- [REQ0170: DemoWeatherAppUi](./REQ0170/index.md)
- [REQ0180: REQ0180 service port schedule](./REQ0180/index.md)

View File

@@ -17,7 +17,7 @@ export async function GET(req: NextRequest, res: NextResponse) {
return response(result, STATUS.OK);
} catch (error) {
return handleError('Post - Get latest', error);
return handleError('Helloworld - Get all', error);
}
}

16
03_source/docker/81_dc_down.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -ex
# -f docker-compose.db.yml
DOCKER_COMPOSE_FILES=" -f docker-compose.yml -f docker-compose.dev.yml"
# docker compose $DOCKER_COMPOSE_FILES build
docker compose $DOCKER_COMPOSE_FILES kill
docker compose $DOCKER_COMPOSE_FILES down
# cd ../api_server
# yarn docker:dev
# cd ..
# docker compose $DOCKER_COMPOSE_FILES logs -f

View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -ex
# -f docker-compose.db.yml
DOCKER_COMPOSE_FILES=" -f docker-compose.yml"
# docker compose $DOCKER_COMPOSE_FILES build
docker compose $DOCKER_COMPOSE_FILES kill
docker compose $DOCKER_COMPOSE_FILES down
# cd ../api_server
# yarn docker:dev
# cd ..
# docker compose $DOCKER_COMPOSE_FILES logs -f

17
03_source/docker/99_prod_up.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
set -ex
# -f docker-compose.db.yml
DOCKER_COMPOSE_FILES=" -f docker-compose.yml"
# docker compose $DOCKER_COMPOSE_FILES build
docker compose $DOCKER_COMPOSE_FILES up -d
docker compose $DOCKER_COMPOSE_FILES logs -f
# cd ../api_server
# yarn docker:dev
# cd ..
# docker compose $DOCKER_COMPOSE_FILES logs -f

View File

@@ -1,9 +1,14 @@
services:
frontend:
command: "sleep infinity"
command: 'sleep infinity'
mobile:
command: "sleep infinity"
command: 'sleep infinity'
cms_backend:
command: "sleep infinity"
command: 'sleep infinity'
postgres:
# container_name: postgres
ports:
- '5432:5432'

View File

@@ -8,22 +8,22 @@ services:
build: ../frontend
# user: 1000:1000
ports:
- 8080:8080
- 10001:8080
volumes:
- ../frontend:/app
working_dir: "/app"
command: "yarn dev"
working_dir: '/app'
command: './dev.sh'
mobile:
image: 192.168.10.61:5000/hksingleparty_mobile
build: ../mobile
# user: 1000:1000
ports:
- 8081:3000
- 10004:3000
volumes:
- ../mobile:/app
working_dir: "/app"
command: "npm run dev"
working_dir: '/app'
command: './dev.sh'
cms_backend:
image: 192.168.10.61:5000/demo_minimal_kit_backend
@@ -32,22 +32,19 @@ services:
env_file:
- .env
ports:
- 7272:7272
- 5555:5555
- 10002:7272
- 10003:5555
volumes:
- ../cms_backend:/app
working_dir: "/app"
command: "yarn dev"
working_dir: '/app'
command: './dev.sh'
postgres:
container_name: postgres
image: postgres:14.1-alpine
restart: unless-stopped
env_file:
- .env
expose:
- "5432"
ports:
- "5432:5432"
- '5432'
volumes:
- db:/var/lib/postgresql/data

Submodule 03_source/ionic-react-conference-app added at 616068e5eb

Submodule 03_source/mobile.compile_ok added at 69f0997a27

Submodule 03_source/mobile.react_17 added at e5d9508eae

Submodule 03_source/mobile.react_18 added at 995871d7c0

Submodule 03_source/mobile.react_18.test_jsx added at 1e663d3024

Submodule 03_source/mobile.react_18.thread1 added at 6307eb427e

Submodule 03_source/mobile.react_18.thread2 added at 6307eb427e

Submodule 03_source/mobile.react_18.thread3 added at 6307eb427e

Submodule 03_source/mobile.react_18_baseline added at 48b471d880

Submodule 03_source/mobile.react_18_test_pullstate added at 02b09209d5

Submodule 03_source/mobile.react_19 added at 616068e5eb

Submodule 03_source/mobile.test.pullstate added at 69f0997a27

View File

@@ -0,0 +1,15 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

View File

@@ -0,0 +1,5 @@
{
"projects": {
"default": "ionic-react-conference-app"
}
}

89
03_source/mobile.trunk.1/.gitignore vendored Normal file
View File

@@ -0,0 +1,89 @@
**/*Zone.Identifier
**/*bak
**/*del
**/*log
**/*tmp
# Logs
.firebase
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# See https://help.github.com/ignore-files/ for more about ignoring files.
# dependencies
/node_modules
# testing
/coverage
# production
/dist
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.stencil/

View File

@@ -0,0 +1 @@
/* /index.html 200

View File

@@ -0,0 +1,3 @@
{
"siteId": "86675615-6271-4145-8ffe-9c78dc4d34a3"
}

View File

@@ -0,0 +1,30 @@
{
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"printWidth": 100,
"overrides": [
{
"files": "src/App.tsx",
"options": {
"printWidth": 160
}
},
{
"files": "src/routes/*",
"options": {
"printWidth": 160
}
},
{
"files": [
"*.html",
"legacy/**/*.js"
],
"options": {
"tabWidth": 4
}
}
]
}

View File

@@ -0,0 +1,3 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
}

View File

@@ -0,0 +1,23 @@
Copyright 2015-present Drifty Co.
http://drifty.com/
MIT License
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,71 @@
# Ionic React Conference App
[![Built with Ionic](https://img.shields.io/badge/-Built%20with%20Ionic-3880FF?style=flat&logo=ionic&logoColor=white)](https://ionicframework.com)
[![React](https://img.shields.io/badge/-React-61DAFB?style=flat&logo=react&logoColor=black)](https://reactjs.org)
[![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
This is a **kitchen-sink demo application** built with **Ionic Framework** and **React**. It showcases a wide range of Ionic components and features in the context of a fictional tech conference app.
**Note**: There is no actual Ionic Conference. This project is purely for demonstration purposes.
👉 [Try the Live Demo](https://ionic-react-conference-app-git-main-ionic1.vercel.app/tutorial)
## 🧱 Framework Variants
This app is also available in other frameworks:
- 🔗 [Ionic Angular Conference App](https://github.com/ionic-team/ionic-conference-app)
- 🔗 [Ionic Vue Conference App](https://github.com/ionic-team/ionic-vue-conference-app)
-**You're viewing the React version**
## ✨ Features
- Browse conference schedule with filtering
- View speaker bios and session details
- User authentication and profile management
- Interactive maps for venue navigation
- Push notifications support
- Dark/Light mode toggling
- Cross-platform support: iOS, Android, and Web
## ⚙️ Getting Started
### Prerequisites
- Node.js (LTS version recommended) → [Download](https://nodejs.org/)
- npm (included with Node.js)
- Ionic CLI → Install globally:
```bash
npm install -g ionic
```
### Installation
1. Clone the repository:
```bash
git clone https://github.com/ionic-team/ionic-react-conference-app.git
```
2. Navigate into the project:
```bash
cd ionic-react-conference-app
```
3. Install dependencies:
```bash
npm install
```
4. Start the dev server:
```bash
ionic serve
```
5. Open your browser to:
```
http://localhost:3000
```
## 🤝 Contributing
We welcome contributions! Please see our [Contributing Guide](.github/CONTRIBUTING.md) for details on how to submit pull requests, report issues, and contribute to the project.
## 📄 License
This project is licensed under the MIT [License](./LICENSE).

Some files were not shown because too many files have changed in this diff Show More