From c5453484d6b739dbf9df09bc8a892ad05925b76a Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Tue, 6 Dec 2022 13:01:56 +1300 Subject: [PATCH] Pause adding intermediary tables for now --- PlanItem.tsx | 22 +++++++++------------- PlanList.tsx | 6 +----- data-source.ts | 6 +++++- day.ts | 10 ++++++++++ migrations/1670284587217-add-days.ts | 27 +++++++++++++++++++++++++++ plan.ts | 14 +++++++++----- workout.ts | 10 ++++++++++ 7 files changed, 71 insertions(+), 24 deletions(-) create mode 100644 day.ts create mode 100644 migrations/1670284587217-add-days.ts create mode 100644 workout.ts diff --git a/PlanItem.tsx b/PlanItem.tsx index 4b0c77ae..16cf49f3 100644 --- a/PlanItem.tsx +++ b/PlanItem.tsx @@ -23,7 +23,6 @@ export default function PlanItem({ const [show, setShow] = useState(false) const [anchor, setAnchor] = useState({x: 0, y: 0}) const [today, setToday] = useState() - const days = useMemo(() => item.days.split(','), [item.days]) const navigation = useNavigation>() useFocusEffect( @@ -42,7 +41,7 @@ export default function PlanItem({ const start = useCallback(async () => { console.log(`${PlanItem.name}.start:`, {item}) setShow(false) - const workout = item.workouts.split(',')[0] + const workout = item.workouts[0].name let first = await getBestSet(workout) if (!first) first = {...defaultSet, name: workout} delete first.id @@ -64,25 +63,22 @@ export default function PlanItem({ const title = useMemo( () => - days.map((day, index) => ( - - {day === today ? ( + item.days?.map((day, index) => ( + + {day.name === today ? ( - {day} + {day.name} ) : ( - day + day.name )} - {index === days.length - 1 ? '' : ', '} + {index === item.days.length - 1 ? '' : ', '} )), - [days, today], + [item.days, today], ) - const description = useMemo( - () => item.workouts.replace(/,/g, ', '), - [item.workouts], - ) + const description = useMemo(() => item.workouts?.join(', '), [item.workouts]) const copy = useCallback(() => { const plan: Plan = {...item} diff --git a/PlanList.tsx b/PlanList.tsx index b20fd387..95534f30 100644 --- a/PlanList.tsx +++ b/PlanList.tsx @@ -20,11 +20,7 @@ export default function PlanList() { const navigation = useNavigation>() const refresh = useCallback(async (value: string) => { - planRepo - .find({ - where: [{days: Like(`%${value}%`)}, {workouts: Like(`%${value}%`)}], - }) - .then(setPlans) + planRepo.find({}).then(setPlans) }, []) useFocusEffect( diff --git a/data-source.ts b/data-source.ts index 31a35c26..7c3eef10 100644 --- a/data-source.ts +++ b/data-source.ts @@ -1,4 +1,5 @@ import {DataSource} from 'typeorm' +import {Day} from './day' import GymSet from './gym-set' import {Sets1667185586014 as sets1667185586014} from './migrations/1667185586014-sets' import {plans1667186124792} from './migrations/1667186124792-plans' @@ -24,14 +25,16 @@ import {addSetsCreated1667186451005} from './migrations/1667186451005-add-sets-c import {addNoSound1667186456118} from './migrations/1667186456118-add-no-sound' import {dropMigrations1667190214743} from './migrations/1667190214743-drop-migrations' import {splitColor1669420187764} from './migrations/1669420187764-split-color' +import {addDays1670284587217} from './migrations/1670284587217-add-days' import {Plan} from './plan' import Settings from './settings' +import {Workout} from './workout' export const AppDataSource = new DataSource({ type: 'react-native', database: 'massive.db', location: 'default', - entities: [GymSet, Plan, Settings], + entities: [GymSet, Plan, Settings, Day, Workout], migrationsRun: true, migrationsTableName: 'typeorm_migrations', migrations: [ @@ -59,5 +62,6 @@ export const AppDataSource = new DataSource({ addNoSound1667186456118, dropMigrations1667190214743, splitColor1669420187764, + addDays1670284587217, ], }) diff --git a/day.ts b/day.ts new file mode 100644 index 00000000..0695de72 --- /dev/null +++ b/day.ts @@ -0,0 +1,10 @@ +import {Column, Entity, PrimaryColumn} from 'typeorm' + +@Entity('days') +export class Day { + @PrimaryColumn('int') + id: number + + @Column('text') + name: string +} diff --git a/migrations/1670284587217-add-days.ts b/migrations/1670284587217-add-days.ts new file mode 100644 index 00000000..be426f70 --- /dev/null +++ b/migrations/1670284587217-add-days.ts @@ -0,0 +1,27 @@ +import {MigrationInterface, QueryRunner, Table, TableColumn} from 'typeorm' + +export class addDays1670284587217 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'days', + columns: [ + new TableColumn({name: 'id', type: 'int', isPrimary: true}), + new TableColumn({name: 'name', type: 'text', isNullable: false}), + ], + }), + ) + await queryRunner.dropColumn('plans', 'days') + await queryRunner.query(` + INSERT INTO days VALUES + (1, 'Sunday'), + (2, 'Monday'), + (3, 'Tuesday'), + (4, 'Wednesday'), + (5, 'Thursday'), + (6, 'Friday'), + (7, 'Saturday')`) + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/plan.ts b/plan.ts index ce258e6e..e03eafa7 100644 --- a/plan.ts +++ b/plan.ts @@ -1,13 +1,17 @@ -import {Column, Entity, PrimaryGeneratedColumn} from 'typeorm' +import {Entity, JoinTable, ManyToMany, PrimaryGeneratedColumn} from 'typeorm' +import {Day} from './day' +import {Workout} from './workout' @Entity('plans') export class Plan { @PrimaryGeneratedColumn() id?: number - @Column('text') - days: string + @ManyToMany(() => Day) + @JoinTable() + days: Day[] - @Column('text') - workouts: string + @ManyToMany(() => Workout) + @JoinTable() + workouts: Workout[] } diff --git a/workout.ts b/workout.ts new file mode 100644 index 00000000..8521e313 --- /dev/null +++ b/workout.ts @@ -0,0 +1,10 @@ +import {Column, Entity, PrimaryGeneratedColumn} from 'typeorm' + +@Entity('workouts') +export class Workout { + @PrimaryGeneratedColumn() + id?: number + + @Column('text') + name: string +}