Added whisky-business

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2021-04-27 18:40:51 -07:00
parent 302bea1398
commit e3c4aa287a
12 changed files with 8676 additions and 0 deletions

View File

@ -0,0 +1,4 @@
{
"12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
"40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
}

13
whisky-business/.gitignore vendored Normal file
View File

@ -0,0 +1,13 @@
node_modules/
.expo/
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store

169
whisky-business/App.tsx Normal file
View File

@ -0,0 +1,169 @@
import { StatusBar } from 'expo-status-bar';
import React, { useState } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { request, GraphQLClient, gql } from 'graphql-request';
import moment from 'moment';
import { buildExecutionContext } from 'graphql/execution/execute';
const client = new GraphQLClient("http://localhost:4000/graphql", { headers: {} });
const Whisky = (props : { active?: boolean, whisky: any, style: any }) => {
const whisky = props.whisky;
let quantity = 0,
time = moment.unix(0);
const locations: any[] = [];
whisky.inventories.forEach((item : { location: any, quantity: number, updated: string }) => {
quantity += item.quantity;
const updated = moment(item.updated, 'YYYY-MM-DD');
if (time < updated) {
time = updated;
}
locations.push(
<View key={item.location.code} style={[styles.horizontal,styles.container]}>
<Text style={whiskyStyles.address}>{item.location.address}</Text>
<Text style={whiskyStyles.phone}>{item.location.phone}</Text>
<Text style={whiskyStyles.quantity}>{item.quantity}</Text>
</View>
)
});
const date = (time.unix() == 0) ? "" : time.format("YYYY-MM-DD");
return (
<View style={[...props.style, whiskyStyles.container]}>
<View style={[styles.container, styles.horizontal, {width: "100%"}]}>
<View style={whiskyStyles.code}><Text>{whisky.code}</Text></View>
<View style={whiskyStyles.description}><Text>{whisky.description}</Text></View>
<View style={whiskyStyles.date}><Text>{date}</Text></View>
<View style={whiskyStyles.quantity}><Text>{quantity}</Text></View>
</View>
{ props.active && <View style={styles.vertical}>
{ locations }
</View> }
</View>
);
};
const textStyle = {
paddingTop: 5,
paddingRight: 10,
paddingBottom: 5,
paddingLeft: 10
};
const whiskyStyles = StyleSheet.create({
container: {
flex: 1,
minHeight: 25,
},
code: {
...textStyle
},
description: {
flexGrow: 10,
...textStyle
},
date: {
...textStyle
},
address: {
flex: 1,
flexGrow: 1,
...textStyle
},
phone: {
...textStyle
},
quantity: {
flexShrink: 10,
minWidth: 50,
...textStyle
}
});
export default function App() {
const [whiskies, setWhiskies] = useState<any>(null),
[activeWhisky, setActiveWhisky] = useState<string>("");
const onPress = (code : string) => {
setActiveWhisky(code == activeWhisky ? "" : code);
};
const items = whiskies ? whiskies
.filter((item : any) => item.size == 750 && item.inventories.length)
.map((whisky : any) => {
const active = whisky.code == activeWhisky;
return (
<TouchableOpacity key={whisky.code} onPress={() => onPress(whisky.code)}>
<Whisky
active={active}
style={[styles.container, styles.whisky]}
whisky={whisky}/>
</TouchableOpacity>
);
}) : [];
let query = gql` {
Whiskies {
code
description
price
size
lastSeen
inventories {
location {
code
address
city
phone
longitude
latitude
}
quantity
updated
}
}
}`;
client.request(query)
.then(data => {
setWhiskies(data.Whiskies);
})
.catch (error => {
console.error(error);
});
return (
<View style={[styles.container]}>
{ items }
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
horizontal: {
flex: 1,
display: "flex",
flexGrow: 1,
flexDirection: "row",
},
vertical: {
flex: 1,
display: "flex",
flexGrow: 1,
flexDirection: "column",
},
whisky: {
width: 500,
borderWidth: 1,
borderColor: "black",
margin: 2
}
});

32
whisky-business/app.json Normal file
View File

@ -0,0 +1,32 @@
{
"expo": {
"name": "whisky-business",
"slug": "whisky-business",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#FFFFFF"
}
},
"web": {
"favicon": "./assets/favicon.png"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -0,0 +1,6 @@
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};

8419
whisky-business/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
{
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web",
"eject": "expo eject"
},
"dependencies": {
"expo": "~41.0.1",
"expo-status-bar": "~1.0.4",
"graphql-request": "^3.4.0",
"moment": "^2.29.1",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-native": "https://github.com/expo/react-native/archive/sdk-41.0.0.tar.gz",
"react-native-web": "~0.13.12"
},
"devDependencies": {
"@babel/core": "^7.9.0",
"@types/react": "~16.9.35",
"@types/react-native": "~0.63.2",
"typescript": "~4.0.0"
},
"private": true
}

View File

@ -0,0 +1,6 @@
{
"extends": "expo/tsconfig.base",
"compilerOptions": {
"strict": true
}
}