├── .gitignore
├── README.md
├── app
├── .babelrc
├── .eslintrc
├── .gitignore
├── .prettierrc
├── .watchmanconfig
├── App.js
├── app.json
├── assets
│ ├── back.png
│ ├── icon.png
│ └── splash.png
├── package.json
├── src
│ ├── AnimUtils.js
│ ├── components
│ │ ├── CalendarColumns.js
│ │ ├── CalendarLayout
│ │ │ ├── Sidebar.js
│ │ │ └── index.js
│ │ ├── EventItems
│ │ │ ├── Item.js
│ │ │ ├── Item.styles.js
│ │ │ └── index.js
│ │ └── misc
│ │ │ ├── BackButton.js
│ │ │ ├── Container.js
│ │ │ ├── Header.js
│ │ │ └── index.js
│ ├── data
│ │ ├── events.js
│ │ ├── index.js
│ │ └── speakers.js
│ ├── theme.js
│ └── views
│ │ ├── Details
│ │ ├── index.js
│ │ └── styles.js
│ │ ├── Home.js
│ │ └── Navigator.js
├── vendor
│ └── react-native-reanimated-v1.0.0-alpha.3.patchexpo29.2.tgz
└── yarn.lock
├── netlify.toml
├── package.json
├── presentation
├── components
│ ├── Provider.js
│ └── Video.js
├── snippets
│ ├── animated.js
│ ├── fluidnavigator.js
│ ├── gesturehandler.js
│ └── panresponder.js
└── theme.js
├── workshop.mdx
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # OSX
3 | #
4 | .DS_Store
5 |
6 | # node.js
7 | #
8 | node_modules/
9 | npm-debug.log
10 | yarn-error.log
11 |
12 |
13 | # Xcode
14 | #
15 | build/
16 | *.pbxuser
17 | !default.pbxuser
18 | *.mode1v3
19 | !default.mode1v3
20 | *.mode2v3
21 | !default.mode2v3
22 | *.perspectivev3
23 | !default.perspectivev3
24 | xcuserdata
25 | *.xccheckout
26 | *.moved-aside
27 | DerivedData
28 | *.hmap
29 | *.ipa
30 | *.xcuserstate
31 | project.xcworkspace
32 |
33 |
34 | # Android/IntelliJ
35 | #
36 | build/
37 | .idea
38 | .gradle
39 | local.properties
40 | *.iml
41 |
42 | # BUCK
43 | buck-out/
44 | \.buckd/
45 | *.keystore
46 |
47 | .build
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React Native Animations & Interactions
2 |
3 | ## React Native EU 2018
4 |
5 | In this workshop, we cover:
6 |
7 | - [react-native-reanimated](https://github.com/kmagiera/react-native-reanimated)
8 | - [react-native-gesture-handler](https://github.com/kmagiera/react-native-gesture-handler) ([docsite](https://kmagiera.github.io/react-native-gesture-handler))
9 | - [FluidTransitions](https://github.com/fram-x/FluidTransitions)
10 |
11 | ## Workshop materials
12 |
13 | https://github.com/FormidableLabs/react-native-interactions-workshop
14 |
15 | ## Presentation
16 |
17 | https://rneu-interactions.netlify.com
18 |
19 | ## Getting started
20 |
21 | ```sh
22 | cd app
23 | yarn
24 | yarn start
25 | ```
26 |
--------------------------------------------------------------------------------
/app/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["babel-preset-expo"],
3 | "env": {
4 | "development": {
5 | "plugins": ["transform-react-jsx-source"]
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/app/.eslintrc:
--------------------------------------------------------------------------------
1 | ---
2 | extends:
3 | - formidable/configurations/es6-react
4 | - prettier
5 | plugins:
6 | - prettier
7 | env:
8 | browser: true
9 | rules:
10 | quotes:
11 | - warn
12 | - single
13 | no-unsafe-negation:
14 | - off
15 | max-nested-callbacks:
16 | - off
17 | arrow-parens:
18 | - off
19 | filenames/match-regex:
20 | - off
21 | no-magic-numbers:
22 | - off
23 | complexity:
24 | - off
25 | max-statements:
26 | - off
27 | no-use-before-define:
28 | - off
29 | valid-jsdoc:
30 | - off
31 | react/prop-types:
32 | - off
33 | react/no-multi-comp:
34 | - off
35 | react/sort-comp:
36 | - off
37 | react/jsx-handler-names:
38 | - off
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/**/*
2 | .expo/*
3 | npm-debug.*
4 |
--------------------------------------------------------------------------------
/app/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "flow",
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/app/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/app/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ThemeProvider } from 'styled-components/native';
3 |
4 | import Navigator from './src/views/Navigator';
5 | import * as theme from './src/theme';
6 |
7 | export default () => (
8 |
\n Our React Native projects often starts by deciding whether to go with native navigation (react-native-navigation) or JS navigation library (react-navigation). But given all these improvements can we still call react-navigation "not native"? In this talk we will learn how Gesture Handler and Reanimated libraries came to live with navigation being the driving force. In this context I will discuss how far is react-navigation from finally proclaiming the badge of really native navigation library.\n '
107 | },
108 | {
109 | day: 5,
110 | time: '12:30',
111 | date: '2018-09-05 12:30',
112 | speaker: 'Lunch',
113 | company: '',
114 | title: '',
115 | agenda: ''
116 | },
117 | {
118 | day: 5,
119 | time: '13:30',
120 | date: '2018-09-05 13:30',
121 | speaker: 'Quinlan Jung',
122 | company: 'EXPO',
123 | title: 'Self hosting mobile applications',
124 | agenda:
125 | 'When building a website, you expose an endpoint where you control the contents that are served back to a user. What if you could do this with a mobile app? Quin will be talking about how you can host your own javascript bundles, writing your own policies so you control exactly what version of the app different users get, and pushing them over the air to users for real time updates.'
126 | },
127 | {
128 | day: 5,
129 | time: '14:00',
130 | date: '2018-09-05 14:00',
131 | speaker: 'Pavlo Babenko',
132 | company: 'AXSY',
133 | title:
134 | 'Wrangling Your Workflow - Taking Charge of React Native Deployments',
135 | agenda:
136 | 'How to hang a painting on the wall with React Native\n So you want to buy a painting, but not sure which one. Or where to place it? we have a solution. Just use your phone for this.\n Augmented reality becomes more popular in recent years. Companies like Apple or Google invests tons of money to develop AR support. Smartphones became powerful enough to deal with all these new features. And it\'ll be ridiculous not to use all this power when looking for the best place to put a piece of art.\n In this talk we\'ll be looking at ARKit from Apple and the ways how we can use it with React Native. We\'ll be building a simple app to hang paintings on the wall and learning how to deal with newest AR technologies.'
137 | },
138 | {
139 | day: 5,
140 | time: '14:30',
141 | date: '2018-09-05 14:30',
142 | speaker: 'Radek Pietruszewski',
143 | company: 'NOZBE',
144 | title: 'Next-generation React databases',
145 | agenda:
146 | '\n How do you manage user data in your React Native app? A popular approach is to use Redux or MobX with a persistence adapter. This works great for small, simple apps, but it has a serious flaw: it doesn\'t scale very well.\n Introducing WatermelonDB — a next generation database for React and React Native. Here\'s why you should care:
\n - Highly scalable. Works as well for 20,000 database records as it does for 100.\n Instant launch. No matter how much data you have, the app still launches with near-zero performance penalty
\n - Lazy loaded everything. Don\'t load all data at launch, query only the exact records you need. That\'s why it\'s fast!
\n - Fully reactive. All records and queries are observable using RxJS. A change in one place propagates to all other places automatically
\n - Made for React. Comes with a HOC so you can declaratively tie together data and components
\n - Relational. Document stores are simple, but relational databases are powerful. Want to find, say, all posts that have a comment by user X? Sure, that\'ll be about a millisecond.
\n - Cross-platform. Works on iOS and Android (using SQLite), on the web (using LokiJS), and it\'s easy to add more
\n - Performant. Uses asynchronous processing, multi-threading (also on the web), resource sharing, and caching to squeeze extra performance
\n - Built for sync. Comes with syncing primitives so you can supply your own synchronization code
\n '
147 | },
148 | {
149 | day: 5,
150 | time: '15:00',
151 | date: '2018-09-05 15:00',
152 | company: 'CALLSTACK',
153 | title: 'Lightning Talks',
154 | agenda:
155 | 'Five high quality lightning talks by different speakers: "Paper: Welcome to Material Design 2.0", "Understanding "Native" in React Native", "Going Native: Reusing Code", "Building Bluetooth powered React Native Apps", and "Developing iOS apps on Linux"'
156 | },
157 | {
158 | day: 5,
159 | time: '16:00',
160 | date: '2018-09-05 16:00',
161 | speaker: 'Coffee break',
162 | company: '',
163 | title: '',
164 | agenda: ''
165 | },
166 | {
167 | day: 5,
168 | time: '16:30',
169 | date: '2018-09-05 16:30',
170 | speaker: 'Matt Hargett',
171 | company: 'PLAYSTATION',
172 | title: '',
173 | agenda: 'Bringing React Native to the next billion devices'
174 | },
175 | {
176 | day: 5,
177 | time: '17:00',
178 | date: '2018-09-05 17:00',
179 | speaker: 'Stanisław Chmiela',
180 | company: 'SOFTWARE MANSION',
181 | title: 'Chopping Expo up into universal modules to take over the world',
182 | agenda:
183 | 'Expo SDK (part of Expo toolchain) is an open-source library built around React Native, allowing developers to access native components and APIs without too much fuss. Until recently it has been a big monolith, it was hard for developers to either remove unused APIs from their bundle or to use some Expo code in vanilla React Native applications. We’ve decided it is time for Expo to be redesigned and split into multiple, separate native + JS (+ more 🤭) libraries which developers will be able to opt-out of using in Expo standalone apps and also to use in their plain RN projects. This talk will describe the process of making this transition, design of the solution we’ve settled on and difficulties we had to overcome along the way (and how we’ve done it).'
184 | },
185 | {
186 | day: 5,
187 | time: '17:30',
188 | date: '2018-09-05 17:30',
189 | speaker: 'Evening party',
190 | company: 'FREE FOOD, FREE BEER & GREAT PEOPLE !',
191 | title: '',
192 | agenda: 'Location:'
193 | },
194 | {
195 | day: 6,
196 | time: '09:30',
197 | date: '2018-09-06 09:30',
198 | speaker: 'Gant Laborde',
199 | company: 'INFINITE RED',
200 | title: 'Taming The Machine',
201 | agenda:
202 | '\n Machine Learning is a buzzword, because big companies love it. Big companies love it, because it\'s insanely cool. Join me as we cover the breath-taking aspects of Machine Learning (ML) and dive deep into how it\'s currently showing up in mobile; especially React Native. We\'ll touch the tip of the iceberg and spark ML creativity for everyone!\n '
203 | },
204 | {
205 | day: 6,
206 | time: '10:00',
207 | date: '2018-09-06 10:00',
208 | speaker: 'Jani Eväkallio',
209 | company: 'FORMIDABLE LABS',
210 | title: 'This is a Talk About You',
211 | agenda:
212 | '\n Over the last three years, I’ve spoken to hundreds of React Native developers, and slowly a picture emerges. It’s a picture of excitement and frustration, obsession with technology and pushing the boundaries. It’s a picture of you.\n This talk will blend meticulous research, subjective personal experiences and speculative fiction to discover the core of that elusive Developer Experience, and ask the inconvenient questions you’ve always been afraid to ask. '
213 | },
214 | {
215 | day: 6,
216 | time: '10:30',
217 | date: '2018-09-06 10:30',
218 | speaker: 'Rafael de Oleza',
219 | company: 'FACEBOOK',
220 | title: 'Building JavaScript bundles for React Native',
221 | agenda:
222 | '\n React Native uses Metro for building the JavaScript code that runs on the devices, both during development and production.
\n In this talk you\'ll learn the main concepts about bundling JavaScript code (both for web applications and React Native) and the architecture of Metro, which is focused around build speed.\n '
223 | },
224 | {
225 | day: 6,
226 | time: '11:00',
227 | date: '2018-09-06 11:00',
228 | speaker: 'Coffee break',
229 | company: '',
230 | title: '',
231 | agenda: ''
232 | },
233 | {
234 | day: 6,
235 | time: '11:30',
236 | date: '2018-09-06 11:30',
237 | speaker: 'Harry Tormey',
238 | company: '',
239 | title: 'React Native Brownfield - Lessons from the Trenches',
240 | agenda:
241 | '\n Hot reloading--the ability to push over the air updates to published apps and the promise of having your app “just work” out of the box on Android as well as iOS--make React Native a tempting proposition for frontend developers. But what do you do when you have to integrate React Native into a large existing native code base?\n '
242 | },
243 | {
244 | day: 6,
245 | time: '12:00',
246 | date: '2018-09-06 12:00',
247 | speaker: 'Samuli Hakoniemi',
248 | company: 'PUNOS MOBILE',
249 | title: 'Better User Experience With Animations',
250 | agenda:
251 | 'Most user interfaces in mobile applications are visually attractive. And it’s always a huge pleasure for developers to work together with talented designers. However an excellent UI requires even more - the art of telling a story.\n My presentation is about enhancing the UI and UX by taking advantage of animation capabilities in React Native. During the talk, you will learn in practice when and how animations should be used and how to create an alluring story for the application.'
252 | },
253 | {
254 | day: 6,
255 | time: '12:30',
256 | date: '2018-09-06 12:30',
257 | speaker: 'Vladimir Novick',
258 | company: '',
259 | title: 'Demystifying complex animations creation process in React Native',
260 | agenda:
261 | 'While Animations can be created in React Native pretty easily, real world mobile apps require a combination of several layers of animations, gestures and micro interaction animations to make user experience stand out. In this talk we will walk through the process from defining complex animation, to implementing it by going through all stages of animation creation process.'
262 | },
263 | {
264 | day: 6,
265 | time: '13:00',
266 | date: '2018-09-06 13:00',
267 | speaker: 'Lunch',
268 | company: '',
269 | title: '',
270 | agenda: ''
271 | },
272 | {
273 | day: 6,
274 | time: '14:00',
275 | date: '2018-09-06 14:00',
276 | speaker: 'David Vacca',
277 | company: 'FACEBOOK',
278 | title: 'The state of React Native',
279 | agenda:
280 | 'This presentation will focus on core projects the React Native team is working on, particularly regarding the re-architecture of the framework.'
281 | },
282 | {
283 | day: 6,
284 | time: '14:30',
285 | date: '2018-09-06 14:30',
286 | speaker: 'Narendra Shetty',
287 | company: 'BOOKING.COM',
288 | title: 'A/B testing with React Native',
289 | agenda:
290 | '\n A/B testing is a common practice in web world. Should that button say "click here" or "learn more"? Will the layout of your homepage materially impact app downloads? Instead of going with your gut, let data drive your product development.\n I will be talking about how to do that in the app world using React Native, both for iOS and Android and the complexities around it. Also I plan to cover these aspects —
\n – Why should you use A/B testing in your business?
\n – What all can you test using A/B testing?
\n – How can you do efficient A/B testing of change in your product?
\n '
291 | },
292 | {
293 | day: 6,
294 | time: '15:00',
295 | date: '2018-09-06 15:00',
296 | speaker: 'Akshat Paul',
297 | company: 'MCKINSEY & COMPANY',
298 | title: 'Building apps for everyone - Accessibility with React Native',
299 | agenda:
300 | 'Developers constantly strive to make stunning apps which not only solve day to day problems but augment life of their users in a way that the app becomes an important part of their lives. The examples of such disruptive apps is endless but at the same time it’s also important that an app for many does not leave few behind. In our quest for building next great app Apple and Android both provides apis to keep accessibility integral part of application design. In this talk I’ll be introducing this concept to every React Native developer and give handson how they can make use of voiceover, accessibility properties and other accessibility elements part of their RN app to make an application inclusive for all. I am equally excited to talk and give demo on this topic since such reminders have far reaching effect on developer community when they build their next app.'
301 | },
302 | {
303 | day: 6,
304 | time: '15:30',
305 | date: '2018-09-06 15:30',
306 | speaker: 'Coffee break',
307 | company: '',
308 | title: '',
309 | agenda: ''
310 | },
311 | {
312 | day: 6,
313 | time: '16:00',
314 | date: '2018-09-06 16:00',
315 | speaker: 'Wouter van den Broek',
316 | company: 'SYNAPPZ MOBILE HEALTH',
317 | title: 'Getting to the Native in React Native',
318 | agenda:
319 | 'The Native part in React Native can look very scary and intimidated but is does not have to be that way, so in this talk you will see what the most frequent challenges are when working on the native side of React Native and how to conquer them.\n If you attend this session you see and learn how to solve a lot of native issues that pop up when working with React Native native code and modules.
\n - The basic of the React Native native module
\n What Is a native module in react native, what are all the moving parts, how do the function in the total process of react native and what is the potential
\n - Extending native modules
\n Native modules are easy extendable, you can use other languages like Swift or Kotlin and even other platforms (Windows/Mac). Also you can extend existing native modules form others if you want to
\n - Building
\n Showing what happens when building, how to solve build errors, solving dependencies and to release when building succeeded
\n - Tips & Tricks
\n Some more tips and tricks when working with native code in your react native project which I encountered in my career.\n '
320 | },
321 | {
322 | day: 6,
323 | time: '16:30',
324 | date: '2018-09-06 16:30',
325 | speaker: 'Q&A panel',
326 | company: '',
327 | title: '',
328 | agenda: 'Quinlan Jung, Expo'
329 | },
330 | {
331 | day: 6,
332 | time: '17:15',
333 | date: '2018-09-06 17:15',
334 | speaker: 'Closing',
335 | company: '',
336 | title: '',
337 | agenda: ''
338 | }
339 | ];
340 | export default data;
341 |
--------------------------------------------------------------------------------
/app/src/data/index.js:
--------------------------------------------------------------------------------
1 | import {
2 | format,
3 | parse,
4 | getTime,
5 | startOfWeek,
6 | addDays,
7 | isSameDay,
8 | setDate
9 | } from 'date-fns';
10 |
11 | import slugify from 'slugify';
12 | import { calendar } from '../theme';
13 | import events from './events';
14 | import speakers from './speakers';
15 |
16 | const { CELL_NUM } = calendar;
17 | const DATE_FORMAT = 'YYYY-MM-dd HH:mm';
18 | const baseDate = new Date();
19 | const parseDate = str => parse(str, DATE_FORMAT, baseDate);
20 |
21 | const speakerLookup = speakers.reduce(
22 | (lookup, speaker) => ({
23 | ...lookup,
24 | [slugify(speaker.name)]: speaker
25 | }),
26 | {}
27 | );
28 |
29 | const normalisedEvents = events
30 | .map(event => {
31 | const day = event.day || null;
32 | const date = setDate(parseDate(event.date), day + 1);
33 |
34 | const title = event.title || null;
35 | const speaker = event.speaker || null;
36 | const company = event.company || null;
37 |
38 | // remove excess whitespace, preseve paragraps
39 | // (real smart code here 👇)
40 | const agenda = event.agenda
41 | ? event.agenda
42 | .trim()
43 | .replace('\n', '
')
44 | .replace(/\s+/g, ' ')
45 | .replace(/
/g, '\n')
46 | .replace(/
/g, '\n\n')
47 | : null;
48 |
49 | const duration = event.duration || 0.5; // in hours
50 | const profile = speaker ? speakerLookup[slugify(speaker)] : undefined;
51 | const isTalk = !!profile;
52 |
53 | if (!date || (!title && !speaker)) {
54 | return null;
55 | }
56 | return {
57 | slug: slugify(`${title} ${getTime(date)}`),
58 | title: title || speaker,
59 | isTalk,
60 | speaker: isTalk ? speaker : null,
61 | profile,
62 | company,
63 | agenda,
64 | date,
65 | duration
66 | };
67 | })
68 | .filter(Boolean);
69 |
70 | const monday = startOfWeek(normalisedEvents[0].date, {
71 | weekStartsOn: 1
72 | });
73 |
74 | const data = Array.from({ length: CELL_NUM }).map((_, i) => {
75 | const date = addDays(monday, i);
76 | const weekday = format(date, 'EEEE').toUpperCase();
77 | const label = weekday.slice(0, 3);
78 | const title = `${weekday.slice(3)}, ${date.getDate() - 1} ${format(
79 | date,
80 | 'MMM YYYY'
81 | )}`;
82 |
83 | const items = normalisedEvents.filter(event => isSameDay(date, event.date));
84 |
85 | return {
86 | date,
87 | label,
88 | title,
89 | items
90 | };
91 | });
92 |
93 | export default data;
94 |
--------------------------------------------------------------------------------
/app/src/data/speakers.js:
--------------------------------------------------------------------------------
1 | // scraped from https://react-native.eu/
2 |
3 | /*
4 | copy(
5 | JSON.stringify(
6 | $$('.js-lightbox-speakers-content .speaker__content').map(item => {
7 | const photo = item.querySelector('img.speaker__photo');
8 | const name = item.querySelector('.speaker__name');
9 | const company = item.querySelector('.speaker__company');
10 | const bio = item.querySelector('.speaker__bio');
11 |
12 | return {
13 | photo: photo ? {
14 | uri: photo.src,
15 | width: photo.width,
16 | height: photo.height
17 | }: null,
18 |
19 | name: name.innerText,
20 | bio: bio ? bio.innerText.trim() : '',
21 | company: company.innerText
22 | };
23 | }),
24 | null,
25 | 2
26 | )
27 | );
28 | */
29 |
30 | export default [
31 | {
32 | photo: {
33 | uri: 'https://react-native.eu/assets/img/data/speaker-sara.jpg',
34 | width: 1326,
35 | height: 1326
36 | },
37 | name: 'Sara Vieira',
38 | bio:
39 | 'Developer Advocate at @YLDio. GraphQL and Open Source enthusiast. Conference Speaker and Airport expert. I am also into drums and horror movies.',
40 | company: 'YLD'
41 | },
42 | {
43 | photo: {
44 | uri: 'https://react-native.eu/assets/img/data/speaker_david_vacca.png',
45 | width: 984,
46 | height: 984
47 | },
48 | name: 'David Vacca',
49 | bio:
50 | 'David Vacca is a software engineer passionate about mobile development. He works in the React Native team at Facebook, where he is currently developing the next version of React Native.',
51 | company: 'Facebook'
52 | },
53 | {
54 | photo: {
55 | uri: 'https://react-native.eu/assets/img/data/speaker-gant.png',
56 | width: 300,
57 | height: 300
58 | },
59 | name: 'Gant Laborde',
60 | bio:
61 | 'Gant Laborde is a software consultant, adjunct professor, published author, and award-winning speaker. He volunteers as a\n mentor, an “open sourcerer”, and aspires to one day become a mad scientist. His React Native prowess is\n prevalent through blogs, videos, and maintainer status in popular repositories. His title is Chief Technology\n Strategist for Infinite Red. Follow Gant’s adventures at http://gantlaborde.com/',
62 | company: 'Infinite Red'
63 | },
64 | {
65 | photo: {
66 | uri: 'https://react-native.eu/assets/img/data/speaker-quinlan.jpg',
67 | width: 982,
68 | height: 982
69 | },
70 | name: 'Quinlan Jung',
71 | bio:
72 | 'Quinlan is a software engineer at Expo, an open source toolchain built around React Native. She’s previously worked on the\n Elastic Block Store at Amazon Web Services.',
73 | company: 'EXPO'
74 | },
75 | {
76 | photo: {
77 | uri: 'https://react-native.eu/assets/img/data/speaker-harry.png',
78 | width: 412,
79 | height: 443
80 | },
81 | name: 'Harry Tormey',
82 | bio:
83 | 'Harry is an experienced Mobile Software Engineer who has worked at prominent Bay Area companies such as Apple and Facebook.\n At Facebook he worked as an iOS engineer on both the search and commerce teams building customer facing\n features that shipped in the main Facebook app. At Apple he worked on the Core Audio team where he specialized\n in frameworks for multimedia Desktop and Mobile Applications. Harry has also shipped a number of React\n Native applications and runs a consultancy that specializes in mobile development and training. Harry has\n trained and consulted at organizations ranging in size from startups to fortune 500 companies.',
84 | company: ''
85 | },
86 | {
87 | photo: {
88 | uri: 'https://react-native.eu/assets/img/data/speaker-samuli.png',
89 | width: 2816,
90 | height: 2816
91 | },
92 | name: 'Samuli Hakoniemi',
93 | bio:
94 | 'Samuli is a long time entrepreneur who\'s in deep love with React Native. He works mostly with start-ups and also keeps himself\n busy by organising events in Finland.',
95 | company: 'Punos Mobile'
96 | },
97 | {
98 | photo: {
99 | uri: 'https://react-native.eu/assets/img/data/speaker-jani.png',
100 | width: 500,
101 | height: 500
102 | },
103 | name: 'Jani Eväkallio',
104 | bio:
105 | 'Jani, a veteran of the Frontend Framework wars, has earned his battle scars writing JavaScript on the bleeding edge for the\n last decade. Today, he leads a team building cross-stack React mobile and web apps at Formidable London.\n He gets childishly excited about beautiful user interactions and design tools. In his spare time, he performs\n improvised comedy and speaks at conferences advocating for the React ecosystem, particularly React Native\n and GraphQL.',
106 | company: 'Formidable Labs'
107 | },
108 | {
109 | photo: {
110 | uri: 'https://react-native.eu/assets/img/data/speaker-mgrabowski.png',
111 | width: 1573,
112 | height: 1559
113 | },
114 | name: 'Mike Grabowski',
115 | bio: '',
116 | company: 'Callstack'
117 | },
118 | {
119 | photo: {
120 | uri: 'https://react-native.eu/assets/img/data/speaker-eric.png',
121 | width: 896,
122 | height: 896
123 | },
124 | name: 'Eric Vicenti',
125 | bio:
126 | 'Creator of Aven, a full-stack framework for web and React Native apps. Author and maintainer of React Navigation with Expo.\n Formerly on Facebook’s open source team and the React Native team.',
127 | company: ''
128 | },
129 | {
130 | photo: {
131 | uri: 'https://react-native.eu/assets/img/data/speaker-kmagiera.png',
132 | width: 818,
133 | height: 818
134 | },
135 | name: 'Krzysztof Magiera',
136 | bio:
137 | 'Ex-facebooker and co-creator of React Native. Now as a head of mobile at Software Mansion working on performance focused\n improvements for animations and gesture handling to React Native and Expo.',
138 | company: 'Software Mansion'
139 | },
140 | {
141 | photo: {
142 | uri: 'https://react-native.eu/assets/img/data/speaker-mhargett.png',
143 | width: 1920,
144 | height: 1920
145 | },
146 | name: 'Matt Hargett',
147 | bio:
148 | 'Matt Hargett has been programming for over 30 years. He lives in San Francisco with his husband, daughter, and dog. His music can be found on all digital storefronts as “the making of the making of”.',
149 | company: 'PlayStation'
150 | },
151 | {
152 | photo: {
153 | uri: 'https://react-native.eu/assets/img/data/speaker-schmiela.jpeg',
154 | width: 460,
155 | height: 460
156 | },
157 | name: 'Stanisław Chmiela',
158 | bio:
159 | 'Currently a Software Mansioner happy to tackle and solve all the problems I face! Jumped into Expo almost a year ago and have been happy to help accelerate mobile app development since then. Previously worked on React frontends, Ruby and Elixir backends and both RN and native iOS mobile apps.',
160 | company: 'Software Mansion'
161 | },
162 | {
163 | photo: {
164 | uri: 'https://react-native.eu/assets/img/data/speaker-pakshat.jpg',
165 | width: 400,
166 | height: 400
167 | },
168 | name: 'Akshat Paul',
169 | bio:
170 | 'Akshat Paul is a developer & Author of the book React Native iOS development essentials with Apress and Rubymotion book with Packtpub (and Technical Reviewer for many titles over years). He has extensive experience of mobile & web development and has delivered many enterprise and consumer applications over the years. In other avatars, Akshat frequently speaks at conferences and meetups on various technologies. He has given talks at The DevTheory India, devops@Scale Amsterdam, RubyConfIndia, #inspect-RubyMotion Conference brussels and was KeyNote speaker at technology leadership events in Bangkok & KL on TDD. Besides writing code Akshat spends time with his family, is an avid reader and obsessive about healthy eating.',
171 | company: 'McKinsey & Company'
172 | },
173 | {
174 | photo: {
175 | uri: 'https://react-native.eu/assets/img/data/speaker-vladimir.jpg',
176 | width: 400,
177 | height: 400
178 | },
179 | name: 'Vladimir Novick',
180 | bio:
181 | 'Software Architect, independent consultant, worldwide speaker, co-organizer of ReactJS Israel, Author of "React Native - Build mobile apps with JavaScript" book and several workshops and courses. He brings years of experience in JavaScript ecosystem and is one of early React and React Native adopters. On daily basis Vladimir works in Web, Mobile, VR/AR and IoT fields both for customers and on personal projects. Previously he worked in Sports, Gaming & Video industries as Lead Architect & Team Leader',
182 | company: ''
183 | },
184 | {
185 | photo: {
186 | uri: 'https://react-native.eu/assets/img/data/speaker-nshetty.jpeg',
187 | width: 250,
188 | height: 250
189 | },
190 | name: 'Narendra Shetty',
191 | bio:
192 | 'Narendra is a Frontend developer at Booking.com. React / React Native enthusiast. He cares about performance and believes that performance is a key for conversion.',
193 | company: 'Booking.com'
194 | },
195 | {
196 | photo: {
197 | uri: 'https://react-native.eu/assets/img/data/speaker-wbroek.png',
198 | width: 360,
199 | height: 358
200 | },
201 | name: 'Wouter van den Broek',
202 | bio:
203 | 'Mobile developer for more than 15 years, moving from SMS, I-mode, Symbian to iOS, Android and now React Native. Coming from web development (both front and backend) which made me appreciate React Native even more. Building apps for over 10 years with always special needs as high interest, that’s why I landed in the world of eHealth and mHealth. Making apps for patients and caregivers to create that \'dent in the universe\' for them.',
204 | company: 'Synappz Mobile Health'
205 | },
206 | {
207 | photo: {
208 | uri: 'https://react-native.eu/assets/img/data/speaker-rpietruszewski.jpg',
209 | width: 2320,
210 | height: 2320
211 | },
212 | name: 'Radek Pietruszewski',
213 | bio:
214 | 'Software writer, proud generalist, senior skeptic. Leads iOS and Mac development at Nozbe. His background is in native development\n for Apple platforms, but for the past two years he\'s been working on next-generation apps built with\n React Native. You can follow Radek at @radexp and his blog on radex.io',
215 | company: 'Nozbe'
216 | },
217 | {
218 | photo: {
219 | uri: 'https://react-native.eu/assets/img/data/speaker-rafael.jpg',
220 | width: 754,
221 | height: 731
222 | },
223 | name: 'Rafael de Oleza',
224 | bio:
225 | 'Frontend developer with more than 10 years of experience and enthusiastic focus on bringing the developer experience of the Web to Mobile development. He’s part of the JavaScript Foundation team at Facebook where he maintains Metro, the React Native bundler.',
226 | company: 'Facebook'
227 | },
228 | {
229 | photo: {
230 | uri: 'https://react-native.eu/assets/img/data/speaker-roy.jpg',
231 | width: 512,
232 | height: 512
233 | },
234 | name: 'Roy Derks',
235 | bio:
236 | 'Roy Derks has been working as a Full-Stack Developer for multiple startups over the last 5 years. Over a year ago he co-founded SwitchBay, where he holds the position of Technical Founder and CTO. Avidly tweets about everything related to JavaScript using #javascriptEverywhere.',
237 | company: 'Hackteam'
238 | },
239 | {
240 | photo: {
241 | uri: 'https://react-native.eu/assets/img/data/speaker-pavlo.jpg',
242 | width: 1365,
243 | height: 1365
244 | },
245 | name: 'Pavlo Babenko',
246 | bio:
247 | 'Pavlo is a software consultant and a web developer. His path started from the Rails development six years ago, then went to web frontend (React.js, Ember.js) and for past two years, he’s pioneering React Native in his company.',
248 | company: 'Axsy'
249 | }
250 | ];
251 |
--------------------------------------------------------------------------------
/app/src/theme.js:
--------------------------------------------------------------------------------
1 | import { Platform, Dimensions, StyleSheet } from 'react-native';
2 |
3 | const viewport = Dimensions.get('window');
4 |
5 | const CELL_NUM = 7;
6 | const SIDEBAR_WIDTH = viewport.width / 8;
7 | const CONTAINER_WIDTH = viewport.width - SIDEBAR_WIDTH;
8 | const CELL_WIDTH = CONTAINER_WIDTH / CELL_NUM;
9 | const HOUR_HEIGHT = CELL_WIDTH * 2;
10 | const PINCH_MAGNITUDE = 0.5;
11 | const SIDEBAR_OFFSET = -8;
12 |
13 | export const isAndroid = Platform.OS === 'android';
14 | export const isIOS = Platform.OS === 'ios';
15 |
16 | export const calendar = {
17 | CELL_NUM,
18 | SIDEBAR_WIDTH,
19 | CONTAINER_WIDTH,
20 | CELL_WIDTH,
21 | HOUR_HEIGHT,
22 | SIDEBAR_OFFSET,
23 | PINCH_MAGNITUDE
24 | };
25 |
26 | export const colors = {
27 | header: '#fbf9fb',
28 | text: '#191819',
29 | label: '#7c7284',
30 | stroke: '#d3cbd8',
31 | strokeRgb: [211, 203, 216],
32 | card: '#e53d40',
33 | inactive: '#a7abb7'
34 | };
35 |
36 | export const sizes = {
37 | hairline: StyleSheet.hairlineWidth,
38 | small: 6,
39 | mid: 12,
40 | large: 24,
41 | cellWidth: `${CELL_WIDTH}px`
42 | };
43 |
--------------------------------------------------------------------------------
/app/src/views/Details/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | // import { Transition } from 'react-navigation-fluid-transitions';
3 |
4 | import { BackButton, Container } from '../../components/misc';
5 | import { Scrollable, Photo, HeaderContent, Header, Title, Speaker, Agenda } from './styles';
6 |
7 | const Details = ({ navigation }) => {
8 | const event = navigation.getParam('event', {});
9 | const photo = event.profile && event.profile.photo;
10 |
11 | return (
12 |