diff --git a/.github/workflows/expo-main.yml b/.github/workflows/expo-main.yml index b4971dd..0a3b892 100644 --- a/.github/workflows/expo-main.yml +++ b/.github/workflows/expo-main.yml @@ -17,14 +17,17 @@ jobs: - name: Install and Build 🔧 run: | + corepack enable yarn install - yarn expo build:web + yarn build:web + yarn build:storybook + cp -r packages/ui/public packages/app/web-build/design-system - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@4.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages - folder: web-build + folder: packages/app/web-build publish-native: name: Publish native versions runs-on: ubuntu-latest @@ -44,18 +47,24 @@ jobs: git config --global user.email "github-action@example.com" git config --global user.name "Github Bot" yarn version --new-version=$BUILD_VERSION + working-directory: packages/app env: BUILD_VERSION: 1.${{ github.run_id }}.${{ github.run_number }} - - run: yarn install + + - run: | + corepack enable + yarn install - run: echo $BUILD_VERSION # - run: eas build -p android --non-interactive - run: eas build -p ios --non-interactive + working-directory: packages/app env: EXPO_APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.EXPO_APPLE_APP_SPECIFIC_PASSWORD }} - run: eas submit --platform ios --non-interactive --latest + working-directory: packages/app env: EXPO_APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.EXPO_APPLE_APP_SPECIFIC_PASSWORD }} diff --git a/.github/workflows/expo-pr.yml b/.github/workflows/expo-pr.yml index e69c610..04d795f 100644 --- a/.github/workflows/expo-pr.yml +++ b/.github/workflows/expo-pr.yml @@ -9,15 +9,18 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 with: node-version: 12.x + - uses: expo/expo-github-action@v5 with: expo-packager: yarn expo-username: ${{ secrets.EXPO_CLI_USERNAME }} expo-password: ${{ secrets.EXPO_CLI_PASSWORD }} expo-cache: true + - name: Cache Node Modules uses: actions/cache@v2 env: @@ -30,9 +33,14 @@ jobs: ${{ runner.os }}-build- ${{ runner.os }}- - name: Install Packages - run: npm i -g yarn && yarn install + run: | + corepack enable + yarn install + - name: Expo Publish Channel run: expo publish --non-interactive --release-channel pr${{ github.event.number }} + working-directory: packages/app + - name: Add Comment To PR uses: mshick/add-pr-comment@v1 env: diff --git a/.gitignore b/.gitignore index c72bff9..8b59c3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /*.log +/.yarn node_modules/ .expo/ dist/ diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/App.tsx b/App.tsx deleted file mode 100644 index 2f3fa3c..0000000 --- a/App.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import 'react-native-get-random-values'; -import { App } from './src/app'; - -export default App; diff --git a/package.json b/package.json index 83ef5a2..ec6b63b 100644 --- a/package.json +++ b/package.json @@ -1,76 +1,16 @@ { "name": "bob", "version": "1.0.0", - "main": "node_modules/expo/AppEntry.js", "homepage": "/bob-the-algorithm", "scripts": { - "start": "expo start", - "android": "expo start --android", - "ios": "expo start --ios", - "web": "expo start --web", - "eject": "expo eject", - "test": "jest --watchAll" - }, - "jest": { - "preset": "jest-expo" - }, - "resolutions": { - "@types/react": "~17.0.21", - "@types/react-dom": "~18.0.3", - "react-error-overlay": "6.0.9" - }, - "dependencies": { - "@expo/vector-icons": "^12.0.0", - "@react-native-async-storage/async-storage": "~1.15.0", - "@react-navigation/bottom-tabs": "^6.0.5", - "@react-navigation/native": "^6.0.2", - "@react-navigation/native-stack": "^6.1.0", - "@react-navigation/stack": "^6.2.1", - "chroma-js": "^2.4.2", - "date-fns": "^2.28.0", - "expo": "~44.0.0", - "expo-asset": "~8.4.4", - "expo-calendar": "~10.1.0", - "expo-constants": "~13.0.0", - "expo-font": "~10.0.4", - "expo-linking": "~3.0.0", - "expo-location": "~14.0.1", - "expo-random": "^12.1.2", - "expo-splash-screen": "~0.14.0", - "expo-status-bar": "~1.2.0", - "expo-task-manager": "~10.1.0", - "expo-updates": "~0.11.7", - "expo-web-browser": "~10.1.0", - "parse-css-color": "^0.2.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "react-native": "0.64.3", - "react-native-calendar-strip": "^2.2.5", - "react-native-calendars": "^1.1284.0", - "react-native-collapsible": "^1.6.0", - "react-native-gesture-handler": "^2.4.2", - "react-native-get-random-values": "^1.8.0", - "react-native-safe-area-context": "3.3.2", - "react-native-screens": "~3.10.1", - "react-native-web": "0.17.1", - "string-to-color": "^2.2.2", - "styled-components": "^5.3.5" - }, - "devDependencies": { - "@babel/core": "^7.12.9", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", - "@types/chroma-js": "^2.1.3", - "@types/react": "~17.0.21", - "@types/react-dom": "^18.0.3", - "@types/styled-components-react-native": "^5.1.3", - "babel-plugin-module-resolver": "^4.1.0", - "expo-cli": "^5.4.3", - "jest": "^26.6.3", - "jest-expo": "~44.0.1", - "react-refresh": "^0.13.0", - "react-test-renderer": "17.0.1", - "typescript": "~4.3.5", - "webpack-hot-middleware": "^2.25.1" + "dev": "yarn workspace @morten-olsen/bob start", + "build:web": "yarn workspace @morten-olsen/bob build:web", + "build:storybook": "yarn workspace @morten-olsen/ui build:storybook", + "dev:storybook": "yarn workspace @morten-olsen/ui dev" }, + "packageManager": "yarn@3.1.0", + "workspaces": [ + "packages/*" + ], "private": true } diff --git a/.expo-shared/assets.json b/packages/app/.expo-shared/assets.json similarity index 100% rename from .expo-shared/assets.json rename to packages/app/.expo-shared/assets.json diff --git a/packages/app/.gitignore b/packages/app/.gitignore new file mode 100644 index 0000000..c72bff9 --- /dev/null +++ b/packages/app/.gitignore @@ -0,0 +1,15 @@ +/*.log +node_modules/ +.expo/ +dist/ +npm-debug.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision +*.orig.* +web-build/ + +# macOS +.DS_Store diff --git a/app.config.js b/packages/app/app.config.js similarity index 100% rename from app.config.js rename to packages/app/app.config.js diff --git a/assets/fonts/SpaceMono-Regular.ttf b/packages/app/assets/fonts/SpaceMono-Regular.ttf similarity index 100% rename from assets/fonts/SpaceMono-Regular.ttf rename to packages/app/assets/fonts/SpaceMono-Regular.ttf diff --git a/assets/images/adaptive-icon.png b/packages/app/assets/images/adaptive-icon.png similarity index 100% rename from assets/images/adaptive-icon.png rename to packages/app/assets/images/adaptive-icon.png diff --git a/assets/images/favicon.png b/packages/app/assets/images/favicon.png similarity index 100% rename from assets/images/favicon.png rename to packages/app/assets/images/favicon.png diff --git a/assets/images/icon.png b/packages/app/assets/images/icon.png similarity index 100% rename from assets/images/icon.png rename to packages/app/assets/images/icon.png diff --git a/assets/images/splash.png b/packages/app/assets/images/splash.png similarity index 100% rename from assets/images/splash.png rename to packages/app/assets/images/splash.png diff --git a/babel.config.js b/packages/app/babel.config.js similarity index 83% rename from babel.config.js rename to packages/app/babel.config.js index d5e760e..c8c9123 100644 --- a/babel.config.js +++ b/packages/app/babel.config.js @@ -6,6 +6,7 @@ module.exports = function(api) { [require.resolve('babel-plugin-module-resolver'), { alias: { '#': './src', + '@morten-olsen/ui': '@morten-olsen/ui/src', }, }], ], diff --git a/eas.json b/packages/app/eas.json similarity index 100% rename from eas.json rename to packages/app/eas.json diff --git a/packages/app/metro.config.js b/packages/app/metro.config.js new file mode 100644 index 0000000..4488ed1 --- /dev/null +++ b/packages/app/metro.config.js @@ -0,0 +1,20 @@ +// Learn more https://docs.expo.io/guides/customizing-metro +const { getDefaultConfig } = require('expo/metro-config'); +const path = require('path'); + +// Find the workspace root, this can be replaced with `find-yarn-workspace-root` +const workspaceRoot = path.resolve(__dirname, '../..'); +const projectRoot = __dirname; + +const config = getDefaultConfig(projectRoot); + +// 1. Watch all files within the monorepo +config.watchFolders = [workspaceRoot]; +// 2. Let Metro know where to resolve packages, and in what order +config.resolver.nodeModulesPaths = [ + path.resolve(projectRoot, 'node_modules'), + path.resolve(workspaceRoot, 'node_modules'), +]; + +module.exports = config; + diff --git a/packages/app/package.json b/packages/app/package.json new file mode 100644 index 0000000..1d53260 --- /dev/null +++ b/packages/app/package.json @@ -0,0 +1,79 @@ +{ + "name": "@morten-olsen/bob", + "version": "1.0.0", + "main": "./src/index.ts", + "homepage": "/bob-the-algorithm", + "scripts": { + "start": "expo start", + "android": "expo start --android", + "ios": "expo start --ios", + "web": "expo start --web", + "eject": "expo eject", + "test": "jest --watchAll", + "build:web": "expo build:web" + }, + "jest": { + "preset": "jest-expo" + }, + "resolutions": { + "@types/react": "~17.0.21", + "@types/react-dom": "~18.0.3", + "react-error-overlay": "6.0.9" + }, + "dependencies": { + "@expo/vector-icons": "^12.0.0", + "@morten-olsen/ui": "workspace:^", + "@react-native-async-storage/async-storage": "~1.15.0", + "@react-navigation/bottom-tabs": "^6.0.5", + "@react-navigation/native": "^6.0.2", + "@react-navigation/native-stack": "^6.1.0", + "@react-navigation/stack": "^6.2.1", + "chroma-js": "^2.4.2", + "date-fns": "^2.28.0", + "expo": "~44.0.0", + "expo-asset": "~8.4.4", + "expo-calendar": "~10.1.0", + "expo-constants": "~13.0.0", + "expo-font": "~10.0.4", + "expo-linking": "~3.0.0", + "expo-location": "~14.0.1", + "expo-random": "^12.1.2", + "expo-splash-screen": "~0.14.0", + "expo-status-bar": "~1.2.0", + "expo-task-manager": "~10.1.0", + "expo-updates": "~0.11.7", + "expo-web-browser": "~10.1.0", + "parse-css-color": "^0.2.1", + "react": "17.0.1", + "react-dom": "17.0.1", + "react-native": "0.64.3", + "react-native-calendar-strip": "^2.2.5", + "react-native-calendars": "^1.1284.0", + "react-native-collapsible": "^1.6.0", + "react-native-gesture-handler": "^2.4.2", + "react-native-get-random-values": "^1.8.0", + "react-native-safe-area-context": "3.3.2", + "react-native-screens": "~3.10.1", + "react-native-web": "0.17.1", + "string-to-color": "^2.2.2", + "styled-components": "^5.3.5" + }, + "devDependencies": { + "@babel/core": "^7.12.9", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", + "@types/chroma-js": "^2.1.3", + "@types/react": "~17.0.21", + "@types/react-dom": "^18.0.3", + "@types/styled-components-react-native": "^5.1.3", + "babel-loader": "^8.2.5", + "babel-plugin-module-resolver": "^4.1.0", + "expo-cli": "^5.4.3", + "jest": "^26.6.3", + "jest-expo": "~44.0.1", + "react-refresh": "^0.13.0", + "react-test-renderer": "17.0.1", + "typescript": "~4.3.5", + "webpack-hot-middleware": "^2.25.1" + }, + "private": true +} diff --git a/src/app.tsx b/packages/app/src/app.tsx similarity index 80% rename from src/app.tsx rename to packages/app/src/app.tsx index dc89c35..e68b638 100644 --- a/src/app.tsx +++ b/packages/app/src/app.tsx @@ -1,10 +1,10 @@ +import 'react-native-get-random-values'; import { StatusBar } from 'expo-status-bar'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { useCallback } from 'react'; import { Setup } from './features/setup'; import { Router } from './ui/router'; -import { ThemeProvider } from 'styled-components/native'; -import { light } from './ui'; +import { Provider } from '@morten-olsen/ui'; const App: React.FC = () => { const getTransit = useCallback( @@ -19,11 +19,11 @@ const App: React.FC = () => { return ( - + - + ); }; diff --git a/src/features/appointments/context.ts b/packages/app/src/features/appointments/context.ts similarity index 100% rename from src/features/appointments/context.ts rename to packages/app/src/features/appointments/context.ts diff --git a/src/features/appointments/hooks.ts b/packages/app/src/features/appointments/hooks.ts similarity index 100% rename from src/features/appointments/hooks.ts rename to packages/app/src/features/appointments/hooks.ts diff --git a/src/features/appointments/index.ts b/packages/app/src/features/appointments/index.ts similarity index 100% rename from src/features/appointments/index.ts rename to packages/app/src/features/appointments/index.ts diff --git a/src/features/appointments/provider.tsx b/packages/app/src/features/appointments/provider.tsx similarity index 100% rename from src/features/appointments/provider.tsx rename to packages/app/src/features/appointments/provider.tsx diff --git a/src/features/async/hooks.ts b/packages/app/src/features/async/hooks.ts similarity index 100% rename from src/features/async/hooks.ts rename to packages/app/src/features/async/hooks.ts diff --git a/src/features/async/index.ts b/packages/app/src/features/async/index.ts similarity index 100% rename from src/features/async/index.ts rename to packages/app/src/features/async/index.ts diff --git a/src/features/data/index.ts b/packages/app/src/features/data/index.ts similarity index 100% rename from src/features/data/index.ts rename to packages/app/src/features/data/index.ts diff --git a/src/features/data/types.ts b/packages/app/src/features/data/types.ts similarity index 100% rename from src/features/data/types.ts rename to packages/app/src/features/data/types.ts diff --git a/src/features/data/utils.ts b/packages/app/src/features/data/utils.ts similarity index 92% rename from src/features/data/utils.ts rename to packages/app/src/features/data/utils.ts index 2156534..cc24d39 100644 --- a/src/features/data/utils.ts +++ b/packages/app/src/features/data/utils.ts @@ -43,6 +43,10 @@ const minutesToTime = (minutes: number): Time => { return { hour, minute }; } +const timeToDate = (time: Time) => { + return new Date(0, 0, 0, time.hour, time.minute); +} + const add = (a: Time, b: Time | number) => { const toAdd = typeof b === 'number' ? b : b.hour * 60 + b.minute const current = a.hour * 60 + a.minute + toAdd; @@ -55,6 +59,7 @@ const timeUtils = { equal, largerThan, timeToMinutes, + timeToDate, max, add, }; diff --git a/src/features/day/context.ts b/packages/app/src/features/day/context.ts similarity index 100% rename from src/features/day/context.ts rename to packages/app/src/features/day/context.ts diff --git a/src/features/day/day.ts b/packages/app/src/features/day/day.ts similarity index 100% rename from src/features/day/day.ts rename to packages/app/src/features/day/day.ts diff --git a/src/features/day/hooks.ts b/packages/app/src/features/day/hooks.ts similarity index 100% rename from src/features/day/hooks.ts rename to packages/app/src/features/day/hooks.ts diff --git a/src/features/day/index.ts b/packages/app/src/features/day/index.ts similarity index 100% rename from src/features/day/index.ts rename to packages/app/src/features/day/index.ts diff --git a/src/features/day/provider.tsx b/packages/app/src/features/day/provider.tsx similarity index 100% rename from src/features/day/provider.tsx rename to packages/app/src/features/day/provider.tsx diff --git a/src/features/day/utils.ts b/packages/app/src/features/day/utils.ts similarity index 100% rename from src/features/day/utils.ts rename to packages/app/src/features/day/utils.ts diff --git a/src/features/goals/context.ts b/packages/app/src/features/goals/context.ts similarity index 100% rename from src/features/goals/context.ts rename to packages/app/src/features/goals/context.ts diff --git a/src/features/goals/hooks.ts b/packages/app/src/features/goals/hooks.ts similarity index 100% rename from src/features/goals/hooks.ts rename to packages/app/src/features/goals/hooks.ts diff --git a/src/features/location/context.ts b/packages/app/src/features/location/context.ts similarity index 100% rename from src/features/location/context.ts rename to packages/app/src/features/location/context.ts diff --git a/src/features/location/hooks.ts b/packages/app/src/features/location/hooks.ts similarity index 100% rename from src/features/location/hooks.ts rename to packages/app/src/features/location/hooks.ts diff --git a/src/features/location/index.ts b/packages/app/src/features/location/index.ts similarity index 100% rename from src/features/location/index.ts rename to packages/app/src/features/location/index.ts diff --git a/src/features/location/provider.tsx b/packages/app/src/features/location/provider.tsx similarity index 100% rename from src/features/location/provider.tsx rename to packages/app/src/features/location/provider.tsx diff --git a/src/features/location/utils.ts b/packages/app/src/features/location/utils.ts similarity index 100% rename from src/features/location/utils.ts rename to packages/app/src/features/location/utils.ts diff --git a/src/features/overrides/context.ts b/packages/app/src/features/overrides/context.ts similarity index 100% rename from src/features/overrides/context.ts rename to packages/app/src/features/overrides/context.ts diff --git a/src/features/overrides/hooks.ts b/packages/app/src/features/overrides/hooks.ts similarity index 100% rename from src/features/overrides/hooks.ts rename to packages/app/src/features/overrides/hooks.ts diff --git a/src/features/overrides/index.ts b/packages/app/src/features/overrides/index.ts similarity index 100% rename from src/features/overrides/index.ts rename to packages/app/src/features/overrides/index.ts diff --git a/src/features/overrides/provider.tsx b/packages/app/src/features/overrides/provider.tsx similarity index 100% rename from src/features/overrides/provider.tsx rename to packages/app/src/features/overrides/provider.tsx diff --git a/src/features/planner/algorithm/build-graph.ts b/packages/app/src/features/planner/algorithm/build-graph.ts similarity index 100% rename from src/features/planner/algorithm/build-graph.ts rename to packages/app/src/features/planner/algorithm/build-graph.ts diff --git a/src/features/planner/algorithm/construct-day.ts b/packages/app/src/features/planner/algorithm/construct-day.ts similarity index 100% rename from src/features/planner/algorithm/construct-day.ts rename to packages/app/src/features/planner/algorithm/construct-day.ts diff --git a/src/features/planner/algorithm/get-next.ts b/packages/app/src/features/planner/algorithm/get-next.ts similarity index 100% rename from src/features/planner/algorithm/get-next.ts rename to packages/app/src/features/planner/algorithm/get-next.ts diff --git a/src/features/planner/algorithm/utils.ts b/packages/app/src/features/planner/algorithm/utils.ts similarity index 100% rename from src/features/planner/algorithm/utils.ts rename to packages/app/src/features/planner/algorithm/utils.ts diff --git a/src/features/planner/context.ts b/packages/app/src/features/planner/context.ts similarity index 100% rename from src/features/planner/context.ts rename to packages/app/src/features/planner/context.ts diff --git a/src/features/planner/hooks.ts b/packages/app/src/features/planner/hooks.ts similarity index 100% rename from src/features/planner/hooks.ts rename to packages/app/src/features/planner/hooks.ts diff --git a/src/features/planner/index.ts b/packages/app/src/features/planner/index.ts similarity index 100% rename from src/features/planner/index.ts rename to packages/app/src/features/planner/index.ts diff --git a/src/features/planner/types.ts b/packages/app/src/features/planner/types.ts similarity index 100% rename from src/features/planner/types.ts rename to packages/app/src/features/planner/types.ts diff --git a/src/features/routines/context.ts b/packages/app/src/features/routines/context.ts similarity index 100% rename from src/features/routines/context.ts rename to packages/app/src/features/routines/context.ts diff --git a/src/features/routines/hooks.ts b/packages/app/src/features/routines/hooks.ts similarity index 100% rename from src/features/routines/hooks.ts rename to packages/app/src/features/routines/hooks.ts diff --git a/src/features/routines/index.ts b/packages/app/src/features/routines/index.ts similarity index 100% rename from src/features/routines/index.ts rename to packages/app/src/features/routines/index.ts diff --git a/src/features/setup.tsx b/packages/app/src/features/setup.tsx similarity index 100% rename from src/features/setup.tsx rename to packages/app/src/features/setup.tsx diff --git a/src/features/tasks/hooks.tsx b/packages/app/src/features/tasks/hooks.tsx similarity index 100% rename from src/features/tasks/hooks.tsx rename to packages/app/src/features/tasks/hooks.tsx diff --git a/src/features/tasks/index.ts b/packages/app/src/features/tasks/index.ts similarity index 100% rename from src/features/tasks/index.ts rename to packages/app/src/features/tasks/index.ts diff --git a/packages/app/src/index.ts b/packages/app/src/index.ts new file mode 100644 index 0000000..39511ae --- /dev/null +++ b/packages/app/src/index.ts @@ -0,0 +1,10 @@ +import { registerRootComponent } from 'expo'; +import './setup'; + +import { App } from './app'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); + diff --git a/packages/app/src/setup.ts b/packages/app/src/setup.ts new file mode 100644 index 0000000..08d725c --- /dev/null +++ b/packages/app/src/setup.ts @@ -0,0 +1 @@ +export default ''; diff --git a/packages/app/src/setup.web.ts b/packages/app/src/setup.web.ts new file mode 100644 index 0000000..f14efc6 --- /dev/null +++ b/packages/app/src/setup.web.ts @@ -0,0 +1,2 @@ +import '@fontsource/montserrat'; +export default ''; diff --git a/src/ui/components/tasks/list-item/index.tsx b/packages/app/src/ui/components/tasks/list-item.tsx similarity index 83% rename from src/ui/components/tasks/list-item/index.tsx rename to packages/app/src/ui/components/tasks/list-item.tsx index 858b61b..96c96e0 100644 --- a/src/ui/components/tasks/list-item/index.tsx +++ b/packages/app/src/ui/components/tasks/list-item.tsx @@ -1,5 +1,5 @@ import { Task } from "#/features/data"; -import { Row, RowProps } from "../../base"; +import { Row, RowProps } from "@morten-olsen/ui"; type Props = RowProps & { item: Task; diff --git a/src/ui/components/plan/day/index.tsx b/packages/app/src/ui/containers/plan/day/index.tsx similarity index 86% rename from src/ui/components/plan/day/index.tsx rename to packages/app/src/ui/containers/plan/day/index.tsx index eabdeb3..866852a 100644 --- a/src/ui/components/plan/day/index.tsx +++ b/packages/app/src/ui/containers/plan/day/index.tsx @@ -1,6 +1,6 @@ import { dayUtils } from "#/features/day"; import { PlanResultDay } from "#/features/planner" -import { Body1, Jumbo } from "#/ui/typography"; +import { Body1, Jumbo } from "@morten-olsen/ui"; import { PlanDayTask } from "./task"; type Props = { @@ -16,7 +16,6 @@ const PlanDay: React.FC = ({ day }) => { } return ( <> - {dayUtils.toId(day.day)} {day.plan.map((item) => { if (item.type === 'task') { return diff --git a/src/ui/components/plan/day/task.tsx b/packages/app/src/ui/containers/plan/day/task.tsx similarity index 77% rename from src/ui/components/plan/day/task.tsx rename to packages/app/src/ui/containers/plan/day/task.tsx index 9f8b428..a4d165b 100644 --- a/src/ui/components/plan/day/task.tsx +++ b/packages/app/src/ui/containers/plan/day/task.tsx @@ -4,7 +4,7 @@ import chroma from 'chroma-js'; import styled from "styled-components/native"; import stringToColor from 'string-to-color'; import { timeUtils } from '#/features/data'; -import { Body1 } from '#/ui/typography'; +import { Body1, CalendarEntry, Row } from '@morten-olsen/ui'; type Props = { task: PlannedTask; @@ -62,20 +62,18 @@ const PlanDayTask: React.FC = ({ task, onPress }) => { [task.name], ); const height = useMemo( - () => timeUtils.timeToMinutes(task.end) - timeUtils.timeToMinutes(task.start), + () => (timeUtils.timeToMinutes(task.end) - timeUtils.timeToMinutes(task.start)) / 10, [task.start, task.end], ); const view = ( - - - - - -
- {task.name} -
- -
+ + + ); if (onPress) { diff --git a/src/ui/components/plan/index.ts b/packages/app/src/ui/containers/plan/index.ts similarity index 100% rename from src/ui/components/plan/index.ts rename to packages/app/src/ui/containers/plan/index.ts diff --git a/src/ui/components/tasks/group/index.tsx b/packages/app/src/ui/containers/tasks/group.tsx similarity index 72% rename from src/ui/components/tasks/group/index.tsx rename to packages/app/src/ui/containers/tasks/group.tsx index 3d90292..f602be7 100644 --- a/src/ui/components/tasks/group/index.tsx +++ b/packages/app/src/ui/containers/tasks/group.tsx @@ -1,10 +1,9 @@ import { TaskType } from "#/features/data"; import { useTasks } from "#/features/tasks"; -import { Group } from "#/ui/components/base" +import { Group } from "@morten-olsen/ui" import { RootNavigationProp } from "#/ui/router"; import { useNavigation } from "@react-navigation/native"; import { useCallback } from "react"; -import { TaskListItem } from "../list-item"; type Props = { type: TaskType; @@ -29,14 +28,12 @@ const TaskGroup: React.FC = ({ type }) => { add={() => add(type)} items={tasks || []} getKey={(task) => task.id} - render={(task) => ( - { - navigate('set-override', { id: task.id }); - }} - /> - )} + render={(task) => ({ + title: task.title, + onPress: () => { + navigate('set-override', { id: task.id }); + }, + })} /> ); }; diff --git a/src/ui/index.ts b/packages/app/src/ui/index.ts similarity index 58% rename from src/ui/index.ts rename to packages/app/src/ui/index.ts index f5cf858..fbfdaf0 100644 --- a/src/ui/index.ts +++ b/packages/app/src/ui/index.ts @@ -1,2 +1 @@ export * from './components/base'; -export * from './theme'; diff --git a/src/ui/router/index.tsx b/packages/app/src/ui/router/index.tsx similarity index 100% rename from src/ui/router/index.tsx rename to packages/app/src/ui/router/index.tsx diff --git a/src/ui/router/router.tsx b/packages/app/src/ui/router/router.tsx similarity index 98% rename from src/ui/router/router.tsx rename to packages/app/src/ui/router/router.tsx index f0d2770..8bc0434 100644 --- a/src/ui/router/router.tsx +++ b/packages/app/src/ui/router/router.tsx @@ -4,7 +4,7 @@ import { useTheme } from 'styled-components/native'; import { NavigationContainer, DefaultTheme } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; -import { Icon } from '../components/base'; +import { Icon } from '@morten-olsen/ui/components/base'; import { DayScreen } from '../screens/day'; import { TaskAddScreen } from '../screens/task/add'; import { MainTabParamList, RootStackParamList } from './types'; diff --git a/src/ui/router/types.ts b/packages/app/src/ui/router/types.ts similarity index 100% rename from src/ui/router/types.ts rename to packages/app/src/ui/router/types.ts diff --git a/packages/app/src/ui/screens/day/index.tsx b/packages/app/src/ui/screens/day/index.tsx new file mode 100644 index 0000000..3bba9a1 --- /dev/null +++ b/packages/app/src/ui/screens/day/index.tsx @@ -0,0 +1,50 @@ +import { useAppointmentStatus } from "#/features/appointments"; +import { AppointmentsStatus } from "#/features/appointments/context"; +import { TaskType } from "#/features/data"; +import { dayUtils, useDate, useSetDate } from "#/features/day"; +import { useSetStartTimeOverride, useStartTimeOverride } from "#/features/overrides"; +import { CalendarStrip } from "@morten-olsen/ui/components/date" +import { TimeInput } from "@morten-olsen/ui/components/form"; +import { TaskGroup } from "#/ui/containers/tasks/group"; +import styled from "styled-components/native"; + +const Wrapper = styled.View` + margin-top: 30px; + flex: 1; +`; + +const Content = styled.ScrollView` + flex: 1; +`; + +const DayScreen: React.FC = () => { + const date = useDate(); + const setDate = useSetDate(); + const appointmentStatus = useAppointmentStatus(); + const startTimeOverride = useStartTimeOverride(); + const [setStartTimeOverride] = useSetStartTimeOverride(); + + return ( + + setDate(dayUtils.dateToDay(date))} + /> + + + {appointmentStatus === AppointmentsStatus.rejected && ( + + )} + + + + + ); +}; + +export { DayScreen }; diff --git a/src/ui/screens/locations/list.tsx b/packages/app/src/ui/screens/locations/list.tsx similarity index 90% rename from src/ui/screens/locations/list.tsx rename to packages/app/src/ui/screens/locations/list.tsx index 26b9caf..574b1d8 100644 --- a/src/ui/screens/locations/list.tsx +++ b/packages/app/src/ui/screens/locations/list.tsx @@ -1,5 +1,5 @@ import { useLocations, useRemoveLocation } from "#/features/location" -import { List, Page } from "#/ui/components/base"; +import { List, Page } from "@morten-olsen/ui/components/base"; import { useNavigation } from "@react-navigation/native"; const LocationListScreen: React.FC = () => { diff --git a/src/ui/screens/locations/set.tsx b/packages/app/src/ui/screens/locations/set.tsx similarity index 91% rename from src/ui/screens/locations/set.tsx rename to packages/app/src/ui/screens/locations/set.tsx index 74a567f..fb9d297 100644 --- a/src/ui/screens/locations/set.tsx +++ b/packages/app/src/ui/screens/locations/set.tsx @@ -1,8 +1,8 @@ import { nanoid } from 'nanoid'; import { useAsyncCallback } from "#/features/async"; import { useLocations, useSetLocation } from "#/features/location" -import { Button, Popup, Row } from "#/ui/components/base"; -import { TextInput } from "#/ui/components/form"; +import { Button, Popup, Row } from "@morten-olsen/ui/components/base"; +import { TextInput } from "@morten-olsen/ui/components/form"; import { LocationSetScreenRouteProp, RootNavigationProp } from "#/ui/router"; import { useNavigation, useRoute } from "@react-navigation/native"; import { useEffect, useState } from "react"; diff --git a/src/ui/screens/more/index.tsx b/packages/app/src/ui/screens/more/index.tsx similarity index 91% rename from src/ui/screens/more/index.tsx rename to packages/app/src/ui/screens/more/index.tsx index aecbe25..319d1f7 100644 --- a/src/ui/screens/more/index.tsx +++ b/packages/app/src/ui/screens/more/index.tsx @@ -1,5 +1,5 @@ import { TaskType } from "#/features/data"; -import { Page, Row } from "#/ui/components/base"; +import { Page, Row } from "@morten-olsen/ui/components/base"; import { MoreScreenNavigationProps } from "#/ui/router"; import { useNavigation } from "@react-navigation/native"; diff --git a/src/ui/screens/plan/index.tsx b/packages/app/src/ui/screens/plan/index.tsx similarity index 54% rename from src/ui/screens/plan/index.tsx rename to packages/app/src/ui/screens/plan/index.tsx index be93eb3..539493a 100644 --- a/src/ui/screens/plan/index.tsx +++ b/packages/app/src/ui/screens/plan/index.tsx @@ -1,9 +1,8 @@ import { Day, dayUtils, useDate } from "#/features/day" import { usePlan } from "#/features/planner"; -import { Button } from "#/ui/components/base"; -import DateInput from "#/ui/components/form/date"; -import { PlanDay } from "#/ui/components/plan"; -import { Body1 } from "#/ui/typography"; +import { Button, Row } from "@morten-olsen/ui/components/base"; +import { CalendarStrip, DateSelector, FormLayout } from "@morten-olsen/ui"; +import { PlanDay } from "#/ui/containers/plan"; import { useCallback, useState } from "react"; import styled from "styled-components/native"; @@ -14,6 +13,13 @@ const Wrapper = styled.View` margin: 60px 0; ` +const Horizontal = styled.View` +`; + +const FlexDateSelector = styled(DateSelector)` + width: 100%; +`; + const PlanScreen: React.FC = () => { const [start, setStart] = useState(dayUtils.today()); const [end, setEnd] = useState(dayUtils.today()); @@ -31,21 +37,27 @@ const PlanScreen: React.FC = () => { return ( - - -