├── .watchmanconfig ├── .gitattributes ├── android ├── .gradle │ └── 2.4 │ │ └── taskArtifacts │ │ ├── cache.properties │ │ ├── fileHashes.bin │ │ ├── fileSnapshots.bin │ │ ├── taskArtifacts.bin │ │ ├── cache.properties.lock │ │ └── outputFileStates.bin ├── settings.gradle ├── app │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ └── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── EBGaramond08-Italic.ttf │ │ │ │ ├── EBGaramond08-Regular.ttf │ │ │ │ ├── EBGaramond12-Italic.ttf │ │ │ │ ├── EBGaramond12-Regular.ttf │ │ │ │ ├── texgyreadventor-bold.otf │ │ │ │ ├── texgyreadventor-bold.ttf │ │ │ │ └── texgyreadventor-regular.ttf │ │ │ ├── java │ │ │ └── com │ │ │ │ └── artistexample │ │ │ │ ├── MainActivity.java │ │ │ │ └── MainApplication.java │ │ │ └── AndroidManifest.xml │ ├── BUCK │ ├── proguard-rules.pro │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── keystores │ ├── debug.keystore.properties │ └── BUCK ├── build.gradle ├── gradle.properties ├── gradlew.bat └── gradlew ├── .babelrc ├── screenshots └── workshop.png ├── assets ├── EBGaramond08-Italic.ttf ├── EBGaramond08-Regular.ttf ├── EBGaramond12-Italic.ttf ├── EBGaramond12-Regular.ttf ├── texgyreadventor-bold.ttf └── texgyreadventor-regular.ttf ├── .buckconfig ├── data ├── schema.js └── schema.graphql ├── jsconfig.json ├── ios ├── ArtistExample.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── ArtistExample.xcscheme │ └── project.pbxproj ├── ArtistExample │ ├── AppDelegate.h │ ├── main.m │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── AppDelegate.m │ ├── Info.plist │ └── Base.lproj │ │ └── LaunchScreen.xib └── ArtistExampleTests │ ├── Info.plist │ └── ArtistExampleTests.m ├── README.md ├── __tests__ ├── index.ios.js └── index.android.js ├── relay └── config.js ├── lib └── artist │ ├── route.js │ └── artist.js ├── .vscode └── launchReactNative.js ├── index.android.js ├── index.ios.js ├── .gitignore ├── package.json ├── LICENSE ├── .flowconfig └── workshop_steps.md /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /android/.gradle/2.4/taskArtifacts/cache.properties: -------------------------------------------------------------------------------- 1 | #Tue Jan 31 16:55:39 EST 2017 2 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'ArtistExample' 2 | 3 | include ':app' 4 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["./data/schema"], 3 | "presets": ["react-native"] 4 | } 5 | -------------------------------------------------------------------------------- /screenshots/workshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/screenshots/workshop.png -------------------------------------------------------------------------------- /assets/EBGaramond08-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/assets/EBGaramond08-Italic.ttf -------------------------------------------------------------------------------- /assets/EBGaramond08-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/assets/EBGaramond08-Regular.ttf -------------------------------------------------------------------------------- /assets/EBGaramond12-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/assets/EBGaramond12-Italic.ttf -------------------------------------------------------------------------------- /assets/EBGaramond12-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/assets/EBGaramond12-Regular.ttf -------------------------------------------------------------------------------- /assets/texgyreadventor-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/assets/texgyreadventor-bold.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ArtistExample 3 | 4 | -------------------------------------------------------------------------------- /assets/texgyreadventor-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/assets/texgyreadventor-regular.ttf -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /android/.gradle/2.4/taskArtifacts/fileHashes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/.gradle/2.4/taskArtifacts/fileHashes.bin -------------------------------------------------------------------------------- /android/.gradle/2.4/taskArtifacts/fileSnapshots.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/.gradle/2.4/taskArtifacts/fileSnapshots.bin -------------------------------------------------------------------------------- /android/.gradle/2.4/taskArtifacts/taskArtifacts.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/.gradle/2.4/taskArtifacts/taskArtifacts.bin -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/keystores/debug.keystore.properties: -------------------------------------------------------------------------------- 1 | key.store=debug.keystore 2 | key.alias=androiddebugkey 3 | key.store.password=android 4 | key.alias.password=android 5 | -------------------------------------------------------------------------------- /android/.gradle/2.4/taskArtifacts/cache.properties.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/.gradle/2.4/taskArtifacts/cache.properties.lock -------------------------------------------------------------------------------- /android/.gradle/2.4/taskArtifacts/outputFileStates.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/.gradle/2.4/taskArtifacts/outputFileStates.bin -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /data/schema.js: -------------------------------------------------------------------------------- 1 | var getbabelRelayPlugin = require('babel-relay-plugin'); 2 | var schema = require('./schema.json'); 3 | 4 | module.exports = getbabelRelayPlugin(schema.data); -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EBGaramond08-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/EBGaramond08-Italic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EBGaramond08-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/EBGaramond08-Regular.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EBGaramond12-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/EBGaramond12-Italic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EBGaramond12-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/EBGaramond12-Regular.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/texgyreadventor-bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/texgyreadventor-bold.otf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/texgyreadventor-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/texgyreadventor-bold.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/texgyreadventor-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orta/Relay-Artist-Example/HEAD/android/app/src/main/assets/fonts/texgyreadventor-regular.ttf -------------------------------------------------------------------------------- /android/keystores/BUCK: -------------------------------------------------------------------------------- 1 | keystore( 2 | name = 'debug', 3 | store = 'debug.keystore', 4 | properties = 'debug.keystore.properties', 5 | visibility = [ 6 | 'PUBLIC', 7 | ], 8 | ) 9 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "allowSyntheticDefaultImports": true 5 | }, 6 | "exclude": [ 7 | "node_modules" 8 | ] 9 | } -------------------------------------------------------------------------------- /ios/ArtistExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Relay-Artist-Example 2 | 3 | 4 | 5 | An example React Native app using Relay to access the Artsy GraphQL API 6 | 7 | Instructions to get to this point can be found at http://artsy.github.io/blog/2017/02/06/React-Native-Workshop/ 8 | -------------------------------------------------------------------------------- /__tests__/index.ios.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import Index from '../index.ios.js'; 4 | 5 | // Note: test renderer must be required after react-native. 6 | import renderer from 'react-test-renderer'; 7 | 8 | it('renders correctly', () => { 9 | const tree = renderer.create( 10 | 11 | ); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/index.android.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import Index from '../index.android.js'; 4 | 5 | // Note: test renderer must be required after react-native. 6 | import renderer from 'react-test-renderer'; 7 | 8 | it('renders correctly', () => { 9 | const tree = renderer.create( 10 | 11 | ); 12 | }); 13 | -------------------------------------------------------------------------------- /relay/config.js: -------------------------------------------------------------------------------- 1 | import Relay from 'react-relay' 2 | 3 | const metaphysicsURL = 'https://metaphysics-staging.artsy.net' 4 | 5 | Relay.injectNetworkLayer( 6 | new Relay.DefaultNetworkLayer(metaphysicsURL, { 7 | headers: { 8 | 'X-XAPP-Token': "[go to staging.artsy.net and pull sd.ARTSY_XAPP_TOKEN from the web inspector]", 9 | } 10 | }) 11 | ) 12 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/artistexample/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.artistexample; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. 9 | * This is used to schedule rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "ArtistExample"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/artist/route.js: -------------------------------------------------------------------------------- 1 | import Relay from 'react-relay' 2 | 3 | export default class ArtistRoute extends Relay.Route { 4 | static queries = { 5 | artist: (component, params) => Relay.QL` 6 | query { 7 | artist(id: $artistID) { 8 | ${component.getFragment('artist', params)} 9 | } 10 | } 11 | `, 12 | }; 13 | 14 | static paramDefinitions = { 15 | artistID: { required: true }, 16 | }; 17 | 18 | static routeName = 'ArtistRoute'; 19 | } 20 | -------------------------------------------------------------------------------- /ios/ArtistExample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /.vscode/launchReactNative.js: -------------------------------------------------------------------------------- 1 | // This file is automatically generated by vscode-react-native@0.2.5 2 | // Please do not modify it manually. All changes will be lost. 3 | try { 4 | var path = require("path"); 5 | var Launcher = require("/Users/orta/.vscode/extensions/vsmobile.vscode-react-native-0.2.5/out/debugger/launcher.js").Launcher; 6 | new Launcher("/Users/orta/dev/js/apps/ArtistExample", "/Users/orta/dev/js/apps/ArtistExample").launch(); 7 | } catch (e) { 8 | throw new Error("Unable to launch application. Try deleting .vscode/launchReactNative.js and restarting vscode."); 9 | } -------------------------------------------------------------------------------- /ios/ArtistExample/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /index.android.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * @flow 5 | */ 6 | 7 | import React, { Component } from 'react'; 8 | import { AppRegistry, View } from 'react-native'; 9 | import Relay from "react-relay" 10 | 11 | import "./relay/config" 12 | 13 | import Artist from "./lib/artist/artist" 14 | import ArtistRoute from "./lib/artist/route" 15 | 16 | const glennRoute = new ArtistRoute({ 17 | artistID: "glenn-brown" 18 | }) 19 | 20 | export default class ArtistExample extends Component { 21 | render = () => 22 | } 23 | 24 | AppRegistry.registerComponent('ArtistExample', () => ArtistExample); 25 | -------------------------------------------------------------------------------- /index.ios.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * @flow 5 | */ 6 | 7 | import React, { Component } from 'react'; 8 | import { AppRegistry, View } from 'react-native'; 9 | import Relay from "react-relay" 10 | 11 | import "./relay/config" 12 | 13 | import Artist from "./lib/artist/artist" 14 | import ArtistRoute from "./lib/artist/route" 15 | 16 | const glennRoute = new ArtistRoute({ 17 | artistID: "glenn-brown" 18 | }) 19 | 20 | export default class ArtistExample extends Component { 21 | render = () => 22 | } 23 | 24 | AppRegistry.registerComponent('ArtistExample', () => ArtistExample); 25 | 26 | 27 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.3.1' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | mavenLocal() 18 | jcenter() 19 | maven { 20 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 21 | url "$rootDir/../node_modules/react-native/android" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | ios/build/ 40 | android/app/build/ 41 | -------------------------------------------------------------------------------- /ios/ArtistExample/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /ios/ArtistExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ArtistExample", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node node_modules/react-native/local-cli/cli.js start", 7 | "test": "jest" 8 | }, 9 | "dependencies": { 10 | "babel-relay-plugin": "https://github.com/alloy/relay/releases/download/v0.9.3/babel-relay-plugin-0.9.3.tgz", 11 | "react": "~15.4.0-rc.4", 12 | "react-native": "0.40.0", 13 | "react-relay": "https://github.com/alloy/relay/releases/download/v0.9.3/react-relay-0.9.3.tgz" 14 | }, 15 | "devDependencies": { 16 | "babel-jest": "18.0.0", 17 | "babel-preset-react-native": "1.9.1", 18 | "jest": "18.1.0", 19 | "react-test-renderer": "~15.4.0-rc.4" 20 | }, 21 | "graphql": { 22 | "file": "data/schema.json", 23 | "tsInterfaceName": "RelayProps" 24 | }, 25 | "jest": { 26 | "preset": "react-native" 27 | }, 28 | "rnpm": { 29 | "assets": ["./assets"] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useDeprecatedNdk=true 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Orta 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/artist/artist.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { 3 | AppRegistry, 4 | StyleSheet, 5 | Text, 6 | View 7 | } from 'react-native'; 8 | import Relay from 'react-relay' 9 | 10 | class Artist extends Component { 11 | render() { 12 | return ( 13 | 14 | {this.props.artist.name.toUpperCase()} 15 | {this.props.artist.years} 16 | 17 | ); 18 | } 19 | } 20 | 21 | const styles = StyleSheet.create({ 22 | container: { 23 | flex: 1, 24 | marginTop: 20, 25 | alignItems: 'center', 26 | backgroundColor: 'white', 27 | }, 28 | title: { 29 | fontSize: 20, 30 | textAlign: 'center', 31 | margin: 10, 32 | fontFamily: "TeXGyreAdventor-Bold" 33 | }, 34 | subtitle: { 35 | textAlign: 'center', 36 | color: '#333333', 37 | fontFamily: 'EBGaramond12-Regular', 38 | marginBottom: 5, 39 | }, 40 | }); 41 | 42 | export default Relay.createContainer(Artist, { 43 | fragments: { 44 | artist: () => Relay.QL` 45 | fragment on Artist { 46 | _id 47 | id 48 | name 49 | years 50 | } 51 | `, 52 | } 53 | }) 54 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/artistexample/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.artistexample; 2 | 3 | import android.app.Application; 4 | import android.util.Log; 5 | 6 | import com.facebook.react.ReactApplication; 7 | import com.facebook.react.ReactInstanceManager; 8 | import com.facebook.react.ReactNativeHost; 9 | import com.facebook.react.ReactPackage; 10 | import com.facebook.react.shell.MainReactPackage; 11 | import com.facebook.soloader.SoLoader; 12 | 13 | import java.util.Arrays; 14 | import java.util.List; 15 | 16 | public class MainApplication extends Application implements ReactApplication { 17 | 18 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 19 | @Override 20 | protected boolean getUseDeveloperSupport() { 21 | return BuildConfig.DEBUG; 22 | } 23 | 24 | @Override 25 | protected List getPackages() { 26 | return Arrays.asList( 27 | new MainReactPackage() 28 | ); 29 | } 30 | }; 31 | 32 | @Override 33 | public ReactNativeHost getReactNativeHost() { 34 | return mReactNativeHost; 35 | } 36 | 37 | @Override 38 | public void onCreate() { 39 | super.onCreate(); 40 | SoLoader.init(this, /* native exopackage */ false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore unexpected extra "@providesModule" 9 | .*/node_modules/.*/node_modules/fbjs/.* 10 | 11 | ; Ignore duplicate module providers 12 | ; For RN Apps installed via npm, "Libraries" folder is inside 13 | ; "node_modules/react-native" but in the source repo it is in the root 14 | .*/Libraries/react-native/React.js 15 | .*/Libraries/react-native/ReactNative.js 16 | 17 | [include] 18 | 19 | [libs] 20 | node_modules/react-native/Libraries/react-native/react-native-interface.js 21 | node_modules/react-native/flow 22 | flow/ 23 | 24 | [options] 25 | module.system=haste 26 | 27 | experimental.strict_type_args=true 28 | 29 | munge_underscores=true 30 | 31 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' 32 | 33 | suppress_type=$FlowIssue 34 | suppress_type=$FlowFixMe 35 | suppress_type=$FixMe 36 | 37 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 38 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 39 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 40 | 41 | unsafe.enable_getters_and_setters=true 42 | 43 | [version] 44 | ^0.36.0 45 | -------------------------------------------------------------------------------- /ios/ArtistExample/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import 13 | #import 14 | 15 | @implementation AppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | NSURL *jsCodeLocation; 20 | 21 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; 22 | 23 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 24 | moduleName:@"ArtistExample" 25 | initialProperties:nil 26 | launchOptions:launchOptions]; 27 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 28 | 29 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 30 | UIViewController *rootViewController = [UIViewController new]; 31 | rootViewController.view = rootView; 32 | self.window.rootViewController = rootViewController; 33 | [self.window makeKeyAndVisible]; 34 | return YES; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /android/app/BUCK: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # To learn about Buck see [Docs](https://buckbuild.com/). 4 | # To run your application with Buck: 5 | # - install Buck 6 | # - `npm start` - to start the packager 7 | # - `cd android` 8 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 9 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 10 | # - `buck install -r android/app` - compile, install and run application 11 | # 12 | 13 | lib_deps = [] 14 | for jarfile in glob(['libs/*.jar']): 15 | name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) 16 | lib_deps.append(':' + name) 17 | prebuilt_jar( 18 | name = name, 19 | binary_jar = jarfile, 20 | ) 21 | 22 | for aarfile in glob(['libs/*.aar']): 23 | name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) 24 | lib_deps.append(':' + name) 25 | android_prebuilt_aar( 26 | name = name, 27 | aar = aarfile, 28 | ) 29 | 30 | android_library( 31 | name = 'all-libs', 32 | exported_deps = lib_deps 33 | ) 34 | 35 | android_library( 36 | name = 'app-code', 37 | srcs = glob([ 38 | 'src/main/java/**/*.java', 39 | ]), 40 | deps = [ 41 | ':all-libs', 42 | ':build_config', 43 | ':res', 44 | ], 45 | ) 46 | 47 | android_build_config( 48 | name = 'build_config', 49 | package = 'com.artistexample', 50 | ) 51 | 52 | android_resource( 53 | name = 'res', 54 | res = 'src/main/res', 55 | package = 'com.artistexample', 56 | ) 57 | 58 | android_binary( 59 | name = 'app', 60 | package_type = 'debug', 61 | manifest = 'src/main/AndroidManifest.xml', 62 | keystore = '//android/keystores:debug', 63 | deps = [ 64 | ':app-code', 65 | ], 66 | ) 67 | -------------------------------------------------------------------------------- /ios/ArtistExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UIViewControllerBasedStatusBarAppearance 38 | 39 | NSLocationWhenInUseUsageDescription 40 | 41 | NSAppTransportSecurity 42 | 43 | NSExceptionDomains 44 | 45 | localhost 46 | 47 | NSExceptionAllowsInsecureHTTPLoads 48 | 49 | 50 | 51 | 52 | UIAppFonts 53 | 54 | EBGaramond08-Italic.ttf 55 | EBGaramond08-Regular.ttf 56 | EBGaramond12-Regular.ttf 57 | texgyreadventor-regular.ttf 58 | EBGaramond12-Italic.ttf 59 | texgyreadventor-bold.otf 60 | texgyreadventor-bold.ttf 61 | 62 | 63 | -------------------------------------------------------------------------------- /ios/ArtistExampleTests/ArtistExampleTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | #import 12 | 13 | #import 14 | #import 15 | 16 | #define TIMEOUT_SECONDS 600 17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 18 | 19 | @interface ArtistExampleTests : XCTestCase 20 | 21 | @end 22 | 23 | @implementation ArtistExampleTests 24 | 25 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 26 | { 27 | if (test(view)) { 28 | return YES; 29 | } 30 | for (UIView *subview in [view subviews]) { 31 | if ([self findSubviewInView:subview matching:test]) { 32 | return YES; 33 | } 34 | } 35 | return NO; 36 | } 37 | 38 | - (void)testRendersWelcomeScreen 39 | { 40 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 41 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 42 | BOOL foundElement = NO; 43 | 44 | __block NSString *redboxError = nil; 45 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 46 | if (level >= RCTLogLevelError) { 47 | redboxError = message; 48 | } 49 | }); 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | RCTSetLogFunction(RCTDefaultLogFunction); 64 | 65 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 66 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 67 | } 68 | 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Disabling obfuscation is useful if you collect stack traces from production crashes 20 | # (unless you are using a system that supports de-obfuscate the stack traces). 21 | -dontobfuscate 22 | 23 | # React Native 24 | 25 | # Keep our interfaces so they can be used by other ProGuard rules. 26 | # See http://sourceforge.net/p/proguard/bugs/466/ 27 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 28 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 29 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 30 | 31 | # Do not strip any method/class that is annotated with @DoNotStrip 32 | -keep @com.facebook.proguard.annotations.DoNotStrip class * 33 | -keep @com.facebook.common.internal.DoNotStrip class * 34 | -keepclassmembers class * { 35 | @com.facebook.proguard.annotations.DoNotStrip *; 36 | @com.facebook.common.internal.DoNotStrip *; 37 | } 38 | 39 | -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 40 | void set*(***); 41 | *** get*(); 42 | } 43 | 44 | -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 45 | -keep class * extends com.facebook.react.bridge.NativeModule { *; } 46 | -keepclassmembers,includedescriptorclasses class * { native ; } 47 | -keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } 48 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } 49 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } 50 | 51 | -dontwarn com.facebook.react.** 52 | 53 | # okhttp 54 | 55 | -keepattributes Signature 56 | -keepattributes *Annotation* 57 | -keep class okhttp3.** { *; } 58 | -keep interface okhttp3.** { *; } 59 | -dontwarn okhttp3.** 60 | 61 | # okio 62 | 63 | -keep class sun.misc.Unsafe { *; } 64 | -dontwarn java.nio.file.* 65 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 66 | -dontwarn okio.** 67 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /ios/ArtistExample/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /ios/ArtistExample.xcodeproj/xcshareddata/xcschemes/ArtistExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 67 | 68 | 69 | 70 | 71 | 77 | 78 | 79 | 80 | 81 | 82 | 92 | 94 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 113 | 119 | 120 | 121 | 122 | 124 | 125 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | 3 | import com.android.build.OutputFile 4 | 5 | /** 6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 7 | * and bundleReleaseJsAndAssets). 8 | * These basically call `react-native bundle` with the correct arguments during the Android build 9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 10 | * bundle directly from the development server. Below you can see all the possible configurations 11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 12 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // whether to bundle JS and assets in debug mode 22 | * bundleInDebug: false, 23 | * 24 | * // whether to bundle JS and assets in release mode 25 | * bundleInRelease: true, 26 | * 27 | * // whether to bundle JS and assets in another build variant (if configured). 28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 29 | * // The configuration property can be in the following formats 30 | * // 'bundleIn${productFlavor}${buildType}' 31 | * // 'bundleIn${buildType}' 32 | * // bundleInFreeDebug: true, 33 | * // bundleInPaidRelease: true, 34 | * // bundleInBeta: true, 35 | * 36 | * // the root of your project, i.e. where "package.json" lives 37 | * root: "../../", 38 | * 39 | * // where to put the JS bundle asset in debug mode 40 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 41 | * 42 | * // where to put the JS bundle asset in release mode 43 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 44 | * 45 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 46 | * // require('./image.png')), in debug mode 47 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 48 | * 49 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 50 | * // require('./image.png')), in release mode 51 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 52 | * 53 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 54 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 55 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 56 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 57 | * // for example, you might want to remove it from here. 58 | * inputExcludes: ["android/**", "ios/**"], 59 | * 60 | * // override which node gets called and with what additional arguments 61 | * nodeExecutableAndArgs: ["node"] 62 | * 63 | * // supply additional arguments to the packager 64 | * extraPackagerArgs: [] 65 | * ] 66 | */ 67 | 68 | apply from: "../../node_modules/react-native/react.gradle" 69 | 70 | /** 71 | * Set this to true to create two separate APKs instead of one: 72 | * - An APK that only works on ARM devices 73 | * - An APK that only works on x86 devices 74 | * The advantage is the size of the APK is reduced by about 4MB. 75 | * Upload all the APKs to the Play Store and people will download 76 | * the correct one based on the CPU architecture of their device. 77 | */ 78 | def enableSeparateBuildPerCPUArchitecture = false 79 | 80 | /** 81 | * Run Proguard to shrink the Java bytecode in release builds. 82 | */ 83 | def enableProguardInReleaseBuilds = false 84 | 85 | android { 86 | compileSdkVersion 23 87 | buildToolsVersion "23.0.1" 88 | 89 | defaultConfig { 90 | applicationId "com.artistexample" 91 | minSdkVersion 16 92 | targetSdkVersion 22 93 | versionCode 1 94 | versionName "1.0" 95 | ndk { 96 | abiFilters "armeabi-v7a", "x86" 97 | } 98 | } 99 | splits { 100 | abi { 101 | reset() 102 | enable enableSeparateBuildPerCPUArchitecture 103 | universalApk false // If true, also generate a universal APK 104 | include "armeabi-v7a", "x86" 105 | } 106 | } 107 | buildTypes { 108 | release { 109 | minifyEnabled enableProguardInReleaseBuilds 110 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 111 | } 112 | } 113 | // applicationVariants are e.g. debug, release 114 | applicationVariants.all { variant -> 115 | variant.outputs.each { output -> 116 | // For each separate APK per architecture, set a unique version code as described here: 117 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits 118 | def versionCodes = ["armeabi-v7a":1, "x86":2] 119 | def abi = output.getFilter(OutputFile.ABI) 120 | if (abi != null) { // null for the universal-debug, universal-release variants 121 | output.versionCodeOverride = 122 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 123 | } 124 | } 125 | } 126 | } 127 | 128 | dependencies { 129 | compile fileTree(dir: "libs", include: ["*.jar"]) 130 | compile "com.android.support:appcompat-v7:23.0.1" 131 | compile "com.facebook.react:react-native:+" // From node_modules 132 | } 133 | 134 | // Run this once to be able to run the application with BUCK 135 | // puts all compile dependencies into folder libs for BUCK to use 136 | task copyDownloadableDepsToLibs(type: Copy) { 137 | from configurations.compile 138 | into 'libs' 139 | } 140 | -------------------------------------------------------------------------------- /workshop_steps.md: -------------------------------------------------------------------------------- 1 | # Setup (aka pre-requisites) 2 | 3 | - Install Yarn 4 | - Install React Native - https://facebook.github.io/react-native/docs/getting-started.html 5 | - Create a new project via `react-native init ArtistExample` 6 | 7 | # Verifying your install 8 | 9 | - `cd ArtistExample` 10 | - Run `yarn run jest` to verify specs 11 | 12 | # Starting out 13 | 14 | - Run `yarn start` 15 | 16 | * Explain packager 17 | * What is going on with the Transpile and Compile ? 18 | * What parts are iOS compiled, and what is JS transpiled? 19 | 20 | - Run `react-native run-ios` to launch the project 21 | 22 | ### Tada - it's your 1st RN app 23 | 24 | That's it. Let's look at some real code. Browse the source code. 25 | 26 | ### Relay 27 | 28 | [Emission Relay Setup](https://github.com/artsy/emission/commit/c6660fe505f38491f4a1d23dc7f41a2baec5657d) 29 | 30 | We're using Relay, this will take a bit of setup. 31 | 32 | - Add relay - `yarn add react-relay@https://github.com/alloy/relay/releases/download/v0.9.3/react-relay-0.9.3.tgz` 33 | - Add babel-relay-plugin - `yarn add babel-relay-plugin@https://github.com/alloy/relay/releases/download/v0.9.3/babel-relay-plugin-0.9.3.tgz` 34 | 35 | Then the schema into a data folder: 36 | 37 | - `mkdir data` 38 | - `curl https://raw.githubusercontent.com/artsy/emission/master/data/schema.graphql > data/schema.graphql` 39 | - `curl https://raw.githubusercontent.com/artsy/emission/master/data/schema.js > data/schema.js` 40 | - `curl https://raw.githubusercontent.com/artsy/emission/master/data/schema.json > data/schema.json` 41 | 42 | Then hook up the plugin: 43 | - Add `"plugins": ["./data/schema"],` to `.babelrc`. 44 | 45 | ### First edit 46 | 47 | - Turn on Live Reloading and HMR 48 | - Turn BG white 49 | 50 | Magic, it does it in real-time. 51 | 52 | ### Making components 53 | 54 | - Make `lib`, `lib/artists` and `lib/artists/artist.js` 55 | - Move `ArtistExample` Component from `index.ios.js` to `lib/artists/artist.js` 56 | - Change the class to `Artist`, and edit the title to reflect a different component 57 | - Go back and nuke most of the `index.ios.js` make it just refer to `Artist`` 58 | 59 | ```js 60 | import Artist from "./lib/artist/artist" 61 | 62 | export default class ArtistExample extends Component { 63 | render() { 64 | return ( 65 | 66 | ); 67 | } 68 | } 69 | ``` 70 | 71 | ### Relay Setup 72 | 73 | Explain there are three useful bits parts of Relay: 74 | 75 | - Routes 76 | - Root Container 77 | - createContainer 78 | 79 | We will talk about them as we go on, but first we need to tell Relay where Metaphysics is. So we need to set up a network layer: 80 | 81 | ```js 82 | import Relay from 'react-relay' 83 | 84 | const metaphysicsURL = 'https://metaphysics-staging.artsy.net' 85 | 86 | Relay.injectNetworkLayer( 87 | new Relay.DefaultNetworkLayer(metaphysicsURL, { 88 | headers: { 89 | 'X-XAPP-Token': "[go to staging.artsy.net and do `sd.ARTSY_XAPP_TOKEN` in console]", 90 | } 91 | }) 92 | ) 93 | ``` 94 | 95 | Next we need to create a Relay Route, this _doesnt_ directly represent a URL representation, but it often can/does. 96 | E.g. in our case this will represent `/artist/:artistID`. 97 | 98 | - create `lib/artist/route.js` add 99 | 100 | ```js 101 | import Relay from 'react-relay' 102 | 103 | export default class ArtistRoute extends Relay.Route { 104 | static queries = { 105 | artist: (component, params) => Relay.QL` 106 | query { 107 | artist(id: $artistID) { 108 | ${component.getFragment('artist', params)} 109 | } 110 | } 111 | `, 112 | }; 113 | 114 | static paramDefinitions = { 115 | artistID: { required: true }, 116 | }; 117 | 118 | static routeName = 'ArtistRoute'; 119 | } 120 | ``` 121 | 122 | - Hook this up inside `index.ios.js`, add an import, and create instance of Route: 123 | 124 | ```js 125 | import ArtistRoute from "./lib/artist/route" 126 | 127 | const glennRoute = new ArtistRoute({ 128 | artistID: "glenn-brown" 129 | }) 130 | ``` 131 | 132 | Then change the components render function: 133 | 134 | ```js 135 | export default class ArtistExample extends Component { 136 | render = () => 137 | } 138 | ``` 139 | 140 | See error, that means it's trying to access a Relay Component, and we have a React component. Let's make it a Relay Component: 141 | 142 | - Remove the `export default` from the `Artist` class in `lib/artist/artist.js` 143 | 144 | - Add Relay fragment 145 | 146 | ```js 147 | export default Relay.createContainer(Artist, { 148 | fragments: { 149 | artist: () => Relay.QL` 150 | fragment on Artist { 151 | _id 152 | id 153 | name 154 | } 155 | `, 156 | } 157 | }) 158 | ``` 159 | 160 | ```js 161 | class Artist extends Component { 162 | render() { 163 | const title = `Hello, I am ${this.props.artist.name}` 164 | return ( 165 | 166 | {title} 167 | 168 | ); 169 | } 170 | } 171 | ``` 172 | 173 | Tada! :tada: 174 | 175 | --- 176 | 177 | Prove the Relay concept by adding `years` to GraphQL and add this to the render function: 178 | 179 | ```js 180 | class Artist extends Component { 181 | render() { 182 | const title = `Hey ${this.props.artist.name}` 183 | return ( 184 | 185 | {title} 186 | {this.props.artist.years} 187 | 188 | ); 189 | } 190 | } 191 | ``` 192 | 193 | ### Looking Stylish! 194 | 195 | OK, we now have the minimum we need - we got API data coming in as props. Now we want to make it look pretty. 196 | 197 | - Add `mkdir assets`, and `mkdir assets/fonts` 198 | 199 | ```sh 200 | curl -L https://github.com/artsy/Artsy-OSSUIFonts/raw/master/Pod/Assets/EBGaramond12-Italic.ttf > assets/EBGaramond12-Italic.ttf 201 | curl -L https://github.com/artsy/Artsy-OSSUIFonts/raw/master/Pod/Assets/EBGaramond12-Regular.ttf > assets/EBGaramond12-Regular.ttf 202 | curl -L https://github.com/artsy/Artsy-OSSUIFonts/raw/master/Pod/Assets/texgyreadventor-bold.ttf > assets/texgyreadventor-bold.ttf 203 | ``` 204 | 205 | - edit `package.json` 206 | 207 | ``` 208 | "rnpm": { 209 | "assets": ["./assets"] 210 | } 211 | ``` 212 | 213 | - run `react-native link`, restart iOS app, by killing it. 214 | - run `react-native run-ios` 215 | 216 | - Add custom styles to the two bits of info on screen: 217 | 218 | ```jsx 219 | {this.props.artist.name.toUpperCase()} 220 | {this.props.artist.years} 221 | ``` 222 | 223 | ```js 224 | const styles = StyleSheet.create({ 225 | container: { 226 | flex: 1, 227 | marginTop: 20, 228 | alignItems: 'center', 229 | backgroundColor: 'white', 230 | }, 231 | title: { 232 | fontSize: 20, 233 | textAlign: 'center', 234 | margin: 10, 235 | fontFamily: "TeXGyreAdventor-Regular" 236 | }, 237 | subtitle: { 238 | textAlign: 'center', 239 | color: '#333333', 240 | fontFamily: 'EBGaramond12-Regular', 241 | marginBottom: 5, 242 | }, 243 | }); 244 | ``` 245 | 246 | And that is our styles. Covering all of the major use cases of React Native for us. 247 | -------------------------------------------------------------------------------- /ios/ArtistExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 11 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 12 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 13 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 14 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 15 | 00E356F31AD99517003FC87E /* ArtistExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ArtistExampleTests.m */; }; 16 | 0FA104C2A0AB4787A87C57D5 /* EBGaramond08-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 120E728BE1D044D9A1FBF93E /* EBGaramond08-Regular.ttf */; }; 17 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 18 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 19 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 20 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 21 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 22 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 23 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 24 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 25 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 26 | 4B857C0479D7411A9141831E /* EBGaramond08-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DFC6611C353545C5A550DB98 /* EBGaramond08-Italic.ttf */; }; 27 | 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 28 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 29 | A56CB18E034347ACA783702A /* EBGaramond12-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F51CB1C883594116BCD30748 /* EBGaramond12-Italic.ttf */; }; 30 | ECBA3CC1FA5A4D1B84CC75A7 /* EBGaramond12-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 964522F85E0A4B15B4C98968 /* EBGaramond12-Regular.ttf */; }; 31 | ED4AE332BF5D4993893370ED /* texgyreadventor-bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 84357FF95CA14A8083CE44B2 /* texgyreadventor-bold.ttf */; }; 32 | F849628F93804E3ABD55E80A /* texgyreadventor-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 77FA649046054A208728FDEE /* texgyreadventor-regular.ttf */; }; 33 | /* End PBXBuildFile section */ 34 | 35 | /* Begin PBXContainerItemProxy section */ 36 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 39 | proxyType = 2; 40 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 41 | remoteInfo = RCTActionSheet; 42 | }; 43 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 46 | proxyType = 2; 47 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 48 | remoteInfo = RCTGeolocation; 49 | }; 50 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 51 | isa = PBXContainerItemProxy; 52 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 53 | proxyType = 2; 54 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 55 | remoteInfo = RCTImage; 56 | }; 57 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 58 | isa = PBXContainerItemProxy; 59 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 60 | proxyType = 2; 61 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 62 | remoteInfo = RCTNetwork; 63 | }; 64 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 65 | isa = PBXContainerItemProxy; 66 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 67 | proxyType = 2; 68 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 69 | remoteInfo = RCTVibration; 70 | }; 71 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 72 | isa = PBXContainerItemProxy; 73 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 74 | proxyType = 1; 75 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 76 | remoteInfo = ArtistExample; 77 | }; 78 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 79 | isa = PBXContainerItemProxy; 80 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 81 | proxyType = 2; 82 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 83 | remoteInfo = RCTSettings; 84 | }; 85 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 86 | isa = PBXContainerItemProxy; 87 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 88 | proxyType = 2; 89 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 90 | remoteInfo = RCTWebSocket; 91 | }; 92 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 93 | isa = PBXContainerItemProxy; 94 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 95 | proxyType = 2; 96 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 97 | remoteInfo = React; 98 | }; 99 | 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { 100 | isa = PBXContainerItemProxy; 101 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 102 | proxyType = 2; 103 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; 104 | remoteInfo = "RCTImage-tvOS"; 105 | }; 106 | 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { 107 | isa = PBXContainerItemProxy; 108 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 109 | proxyType = 2; 110 | remoteGlobalIDString = 2D2A28471D9B043800D4039D; 111 | remoteInfo = "RCTLinking-tvOS"; 112 | }; 113 | 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 114 | isa = PBXContainerItemProxy; 115 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 116 | proxyType = 2; 117 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D; 118 | remoteInfo = "RCTNetwork-tvOS"; 119 | }; 120 | 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 121 | isa = PBXContainerItemProxy; 122 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 123 | proxyType = 2; 124 | remoteGlobalIDString = 2D2A28611D9B046600D4039D; 125 | remoteInfo = "RCTSettings-tvOS"; 126 | }; 127 | 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { 128 | isa = PBXContainerItemProxy; 129 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 130 | proxyType = 2; 131 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D; 132 | remoteInfo = "RCTText-tvOS"; 133 | }; 134 | 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { 135 | isa = PBXContainerItemProxy; 136 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 137 | proxyType = 2; 138 | remoteGlobalIDString = 2D2A28881D9B049200D4039D; 139 | remoteInfo = "RCTWebSocket-tvOS"; 140 | }; 141 | 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { 142 | isa = PBXContainerItemProxy; 143 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 144 | proxyType = 2; 145 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D; 146 | remoteInfo = "React-tvOS"; 147 | }; 148 | 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { 149 | isa = PBXContainerItemProxy; 150 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 151 | proxyType = 2; 152 | remoteGlobalIDString = 3D3C059A1DE3340900C268FA; 153 | remoteInfo = yoga; 154 | }; 155 | 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { 156 | isa = PBXContainerItemProxy; 157 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 158 | proxyType = 2; 159 | remoteGlobalIDString = 3D3C06751DE3340C00C268FA; 160 | remoteInfo = "yoga-tvOS"; 161 | }; 162 | 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { 163 | isa = PBXContainerItemProxy; 164 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 165 | proxyType = 2; 166 | remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; 167 | remoteInfo = cxxreact; 168 | }; 169 | 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 170 | isa = PBXContainerItemProxy; 171 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 172 | proxyType = 2; 173 | remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; 174 | remoteInfo = "cxxreact-tvOS"; 175 | }; 176 | 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 177 | isa = PBXContainerItemProxy; 178 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 179 | proxyType = 2; 180 | remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; 181 | remoteInfo = jschelpers; 182 | }; 183 | 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 184 | isa = PBXContainerItemProxy; 185 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 186 | proxyType = 2; 187 | remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; 188 | remoteInfo = "jschelpers-tvOS"; 189 | }; 190 | 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 191 | isa = PBXContainerItemProxy; 192 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 193 | proxyType = 2; 194 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 195 | remoteInfo = RCTAnimation; 196 | }; 197 | 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 198 | isa = PBXContainerItemProxy; 199 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 200 | proxyType = 2; 201 | remoteGlobalIDString = 2D2A28201D9B03D100D4039D; 202 | remoteInfo = "RCTAnimation-tvOS"; 203 | }; 204 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 205 | isa = PBXContainerItemProxy; 206 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 207 | proxyType = 2; 208 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 209 | remoteInfo = RCTLinking; 210 | }; 211 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 212 | isa = PBXContainerItemProxy; 213 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 214 | proxyType = 2; 215 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 216 | remoteInfo = RCTText; 217 | }; 218 | /* End PBXContainerItemProxy section */ 219 | 220 | /* Begin PBXFileReference section */ 221 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 222 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 223 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 224 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 225 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 226 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 227 | 00E356EE1AD99517003FC87E /* ArtistExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArtistExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 228 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 229 | 00E356F21AD99517003FC87E /* ArtistExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ArtistExampleTests.m; sourceTree = ""; }; 230 | 120E728BE1D044D9A1FBF93E /* EBGaramond08-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "EBGaramond08-Regular.ttf"; path = "../assets/EBGaramond08-Regular.ttf"; sourceTree = ""; }; 231 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 232 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 233 | 13B07F961A680F5B00A75B9A /* ArtistExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ArtistExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 234 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ArtistExample/AppDelegate.h; sourceTree = ""; }; 235 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = ArtistExample/AppDelegate.m; sourceTree = ""; }; 236 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 237 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ArtistExample/Images.xcassets; sourceTree = ""; }; 238 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ArtistExample/Info.plist; sourceTree = ""; }; 239 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ArtistExample/main.m; sourceTree = ""; }; 240 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 241 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; 242 | 77FA649046054A208728FDEE /* texgyreadventor-regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "texgyreadventor-regular.ttf"; path = "../assets/texgyreadventor-regular.ttf"; sourceTree = ""; }; 243 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 244 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 245 | 84357FF95CA14A8083CE44B2 /* texgyreadventor-bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "texgyreadventor-bold.ttf"; path = "../assets/texgyreadventor-bold.ttf"; sourceTree = ""; }; 246 | 964522F85E0A4B15B4C98968 /* EBGaramond12-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "EBGaramond12-Regular.ttf"; path = "../assets/EBGaramond12-Regular.ttf"; sourceTree = ""; }; 247 | 9B816764C3AB4B1FBC98D501 /* texgyreadventor-bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "texgyreadventor-bold.otf"; path = "../assets/texgyreadventor-bold.otf"; sourceTree = ""; }; 248 | DFC6611C353545C5A550DB98 /* EBGaramond08-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "EBGaramond08-Italic.ttf"; path = "../assets/EBGaramond08-Italic.ttf"; sourceTree = ""; }; 249 | F51CB1C883594116BCD30748 /* EBGaramond12-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "EBGaramond12-Italic.ttf"; path = "../assets/EBGaramond12-Italic.ttf"; sourceTree = ""; }; 250 | /* End PBXFileReference section */ 251 | 252 | /* Begin PBXFrameworksBuildPhase section */ 253 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 254 | isa = PBXFrameworksBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 262 | isa = PBXFrameworksBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 266 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 267 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 268 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 269 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 270 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 271 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 272 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 273 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 274 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 275 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 276 | ); 277 | runOnlyForDeploymentPostprocessing = 0; 278 | }; 279 | /* End PBXFrameworksBuildPhase section */ 280 | 281 | /* Begin PBXGroup section */ 282 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 283 | isa = PBXGroup; 284 | children = ( 285 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 286 | ); 287 | name = Products; 288 | sourceTree = ""; 289 | }; 290 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 291 | isa = PBXGroup; 292 | children = ( 293 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 294 | ); 295 | name = Products; 296 | sourceTree = ""; 297 | }; 298 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 299 | isa = PBXGroup; 300 | children = ( 301 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 302 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, 303 | ); 304 | name = Products; 305 | sourceTree = ""; 306 | }; 307 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 308 | isa = PBXGroup; 309 | children = ( 310 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 311 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, 312 | ); 313 | name = Products; 314 | sourceTree = ""; 315 | }; 316 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 317 | isa = PBXGroup; 318 | children = ( 319 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 320 | ); 321 | name = Products; 322 | sourceTree = ""; 323 | }; 324 | 00E356EF1AD99517003FC87E /* ArtistExampleTests */ = { 325 | isa = PBXGroup; 326 | children = ( 327 | 00E356F21AD99517003FC87E /* ArtistExampleTests.m */, 328 | 00E356F01AD99517003FC87E /* Supporting Files */, 329 | ); 330 | path = ArtistExampleTests; 331 | sourceTree = ""; 332 | }; 333 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 334 | isa = PBXGroup; 335 | children = ( 336 | 00E356F11AD99517003FC87E /* Info.plist */, 337 | ); 338 | name = "Supporting Files"; 339 | sourceTree = ""; 340 | }; 341 | 139105B71AF99BAD00B5F7CC /* Products */ = { 342 | isa = PBXGroup; 343 | children = ( 344 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 345 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, 346 | ); 347 | name = Products; 348 | sourceTree = ""; 349 | }; 350 | 139FDEE71B06529A00C62182 /* Products */ = { 351 | isa = PBXGroup; 352 | children = ( 353 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 354 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, 355 | ); 356 | name = Products; 357 | sourceTree = ""; 358 | }; 359 | 13B07FAE1A68108700A75B9A /* ArtistExample */ = { 360 | isa = PBXGroup; 361 | children = ( 362 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 363 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 364 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 365 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 366 | 13B07FB61A68108700A75B9A /* Info.plist */, 367 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 368 | 13B07FB71A68108700A75B9A /* main.m */, 369 | ); 370 | name = ArtistExample; 371 | sourceTree = ""; 372 | }; 373 | 146834001AC3E56700842450 /* Products */ = { 374 | isa = PBXGroup; 375 | children = ( 376 | 146834041AC3E56700842450 /* libReact.a */, 377 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */, 378 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, 379 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, 380 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, 381 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, 382 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, 383 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, 384 | ); 385 | name = Products; 386 | sourceTree = ""; 387 | }; 388 | 5E91572E1DD0AC6500FF2AA8 /* Products */ = { 389 | isa = PBXGroup; 390 | children = ( 391 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, 392 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, 393 | ); 394 | name = Products; 395 | sourceTree = ""; 396 | }; 397 | 5ED01A0F36904268B9182B9D /* Resources */ = { 398 | isa = PBXGroup; 399 | children = ( 400 | DFC6611C353545C5A550DB98 /* EBGaramond08-Italic.ttf */, 401 | 120E728BE1D044D9A1FBF93E /* EBGaramond08-Regular.ttf */, 402 | 964522F85E0A4B15B4C98968 /* EBGaramond12-Regular.ttf */, 403 | 77FA649046054A208728FDEE /* texgyreadventor-regular.ttf */, 404 | F51CB1C883594116BCD30748 /* EBGaramond12-Italic.ttf */, 405 | 9B816764C3AB4B1FBC98D501 /* texgyreadventor-bold.otf */, 406 | 84357FF95CA14A8083CE44B2 /* texgyreadventor-bold.ttf */, 407 | ); 408 | name = Resources; 409 | sourceTree = ""; 410 | }; 411 | 78C398B11ACF4ADC00677621 /* Products */ = { 412 | isa = PBXGroup; 413 | children = ( 414 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 415 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, 416 | ); 417 | name = Products; 418 | sourceTree = ""; 419 | }; 420 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 421 | isa = PBXGroup; 422 | children = ( 423 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, 424 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 425 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 426 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 427 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 428 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 429 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 430 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 431 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 432 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 433 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 434 | ); 435 | name = Libraries; 436 | sourceTree = ""; 437 | }; 438 | 832341B11AAA6A8300B99B32 /* Products */ = { 439 | isa = PBXGroup; 440 | children = ( 441 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 442 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, 443 | ); 444 | name = Products; 445 | sourceTree = ""; 446 | }; 447 | 83CBB9F61A601CBA00E9B192 = { 448 | isa = PBXGroup; 449 | children = ( 450 | 13B07FAE1A68108700A75B9A /* ArtistExample */, 451 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 452 | 00E356EF1AD99517003FC87E /* ArtistExampleTests */, 453 | 83CBBA001A601CBA00E9B192 /* Products */, 454 | 5ED01A0F36904268B9182B9D /* Resources */, 455 | ); 456 | indentWidth = 2; 457 | sourceTree = ""; 458 | tabWidth = 2; 459 | }; 460 | 83CBBA001A601CBA00E9B192 /* Products */ = { 461 | isa = PBXGroup; 462 | children = ( 463 | 13B07F961A680F5B00A75B9A /* ArtistExample.app */, 464 | 00E356EE1AD99517003FC87E /* ArtistExampleTests.xctest */, 465 | ); 466 | name = Products; 467 | sourceTree = ""; 468 | }; 469 | /* End PBXGroup section */ 470 | 471 | /* Begin PBXNativeTarget section */ 472 | 00E356ED1AD99517003FC87E /* ArtistExampleTests */ = { 473 | isa = PBXNativeTarget; 474 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ArtistExampleTests" */; 475 | buildPhases = ( 476 | 00E356EA1AD99517003FC87E /* Sources */, 477 | 00E356EB1AD99517003FC87E /* Frameworks */, 478 | 00E356EC1AD99517003FC87E /* Resources */, 479 | ); 480 | buildRules = ( 481 | ); 482 | dependencies = ( 483 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 484 | ); 485 | name = ArtistExampleTests; 486 | productName = ArtistExampleTests; 487 | productReference = 00E356EE1AD99517003FC87E /* ArtistExampleTests.xctest */; 488 | productType = "com.apple.product-type.bundle.unit-test"; 489 | }; 490 | 13B07F861A680F5B00A75B9A /* ArtistExample */ = { 491 | isa = PBXNativeTarget; 492 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ArtistExample" */; 493 | buildPhases = ( 494 | 13B07F871A680F5B00A75B9A /* Sources */, 495 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 496 | 13B07F8E1A680F5B00A75B9A /* Resources */, 497 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 498 | ); 499 | buildRules = ( 500 | ); 501 | dependencies = ( 502 | ); 503 | name = ArtistExample; 504 | productName = "Hello World"; 505 | productReference = 13B07F961A680F5B00A75B9A /* ArtistExample.app */; 506 | productType = "com.apple.product-type.application"; 507 | }; 508 | /* End PBXNativeTarget section */ 509 | 510 | /* Begin PBXProject section */ 511 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 512 | isa = PBXProject; 513 | attributes = { 514 | LastUpgradeCheck = 610; 515 | ORGANIZATIONNAME = Facebook; 516 | TargetAttributes = { 517 | 00E356ED1AD99517003FC87E = { 518 | CreatedOnToolsVersion = 6.2; 519 | TestTargetID = 13B07F861A680F5B00A75B9A; 520 | }; 521 | }; 522 | }; 523 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ArtistExample" */; 524 | compatibilityVersion = "Xcode 3.2"; 525 | developmentRegion = English; 526 | hasScannedForEncodings = 0; 527 | knownRegions = ( 528 | en, 529 | Base, 530 | ); 531 | mainGroup = 83CBB9F61A601CBA00E9B192; 532 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 533 | projectDirPath = ""; 534 | projectReferences = ( 535 | { 536 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 537 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 538 | }, 539 | { 540 | ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; 541 | ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 542 | }, 543 | { 544 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 545 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 546 | }, 547 | { 548 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 549 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 550 | }, 551 | { 552 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 553 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 554 | }, 555 | { 556 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 557 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 558 | }, 559 | { 560 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 561 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 562 | }, 563 | { 564 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 565 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 566 | }, 567 | { 568 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 569 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 570 | }, 571 | { 572 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 573 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 574 | }, 575 | { 576 | ProductGroup = 146834001AC3E56700842450 /* Products */; 577 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 578 | }, 579 | ); 580 | projectRoot = ""; 581 | targets = ( 582 | 13B07F861A680F5B00A75B9A /* ArtistExample */, 583 | 00E356ED1AD99517003FC87E /* ArtistExampleTests */, 584 | ); 585 | }; 586 | /* End PBXProject section */ 587 | 588 | /* Begin PBXReferenceProxy section */ 589 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 590 | isa = PBXReferenceProxy; 591 | fileType = archive.ar; 592 | path = libRCTActionSheet.a; 593 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 594 | sourceTree = BUILT_PRODUCTS_DIR; 595 | }; 596 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 597 | isa = PBXReferenceProxy; 598 | fileType = archive.ar; 599 | path = libRCTGeolocation.a; 600 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 601 | sourceTree = BUILT_PRODUCTS_DIR; 602 | }; 603 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 604 | isa = PBXReferenceProxy; 605 | fileType = archive.ar; 606 | path = libRCTImage.a; 607 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 608 | sourceTree = BUILT_PRODUCTS_DIR; 609 | }; 610 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 611 | isa = PBXReferenceProxy; 612 | fileType = archive.ar; 613 | path = libRCTNetwork.a; 614 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 615 | sourceTree = BUILT_PRODUCTS_DIR; 616 | }; 617 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 618 | isa = PBXReferenceProxy; 619 | fileType = archive.ar; 620 | path = libRCTVibration.a; 621 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 622 | sourceTree = BUILT_PRODUCTS_DIR; 623 | }; 624 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 625 | isa = PBXReferenceProxy; 626 | fileType = archive.ar; 627 | path = libRCTSettings.a; 628 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 629 | sourceTree = BUILT_PRODUCTS_DIR; 630 | }; 631 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 632 | isa = PBXReferenceProxy; 633 | fileType = archive.ar; 634 | path = libRCTWebSocket.a; 635 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 636 | sourceTree = BUILT_PRODUCTS_DIR; 637 | }; 638 | 146834041AC3E56700842450 /* libReact.a */ = { 639 | isa = PBXReferenceProxy; 640 | fileType = archive.ar; 641 | path = libReact.a; 642 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 643 | sourceTree = BUILT_PRODUCTS_DIR; 644 | }; 645 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { 646 | isa = PBXReferenceProxy; 647 | fileType = archive.ar; 648 | path = "libRCTImage-tvOS.a"; 649 | remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; 650 | sourceTree = BUILT_PRODUCTS_DIR; 651 | }; 652 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { 653 | isa = PBXReferenceProxy; 654 | fileType = archive.ar; 655 | path = "libRCTLinking-tvOS.a"; 656 | remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; 657 | sourceTree = BUILT_PRODUCTS_DIR; 658 | }; 659 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { 660 | isa = PBXReferenceProxy; 661 | fileType = archive.ar; 662 | path = "libRCTNetwork-tvOS.a"; 663 | remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; 664 | sourceTree = BUILT_PRODUCTS_DIR; 665 | }; 666 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { 667 | isa = PBXReferenceProxy; 668 | fileType = archive.ar; 669 | path = "libRCTSettings-tvOS.a"; 670 | remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; 671 | sourceTree = BUILT_PRODUCTS_DIR; 672 | }; 673 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { 674 | isa = PBXReferenceProxy; 675 | fileType = archive.ar; 676 | path = "libRCTText-tvOS.a"; 677 | remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; 678 | sourceTree = BUILT_PRODUCTS_DIR; 679 | }; 680 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { 681 | isa = PBXReferenceProxy; 682 | fileType = archive.ar; 683 | path = "libRCTWebSocket-tvOS.a"; 684 | remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; 685 | sourceTree = BUILT_PRODUCTS_DIR; 686 | }; 687 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { 688 | isa = PBXReferenceProxy; 689 | fileType = archive.ar; 690 | path = libReact.a; 691 | remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; 692 | sourceTree = BUILT_PRODUCTS_DIR; 693 | }; 694 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { 695 | isa = PBXReferenceProxy; 696 | fileType = archive.ar; 697 | path = libyoga.a; 698 | remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; 699 | sourceTree = BUILT_PRODUCTS_DIR; 700 | }; 701 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { 702 | isa = PBXReferenceProxy; 703 | fileType = archive.ar; 704 | path = libyoga.a; 705 | remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; 706 | sourceTree = BUILT_PRODUCTS_DIR; 707 | }; 708 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { 709 | isa = PBXReferenceProxy; 710 | fileType = archive.ar; 711 | path = libcxxreact.a; 712 | remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; 713 | sourceTree = BUILT_PRODUCTS_DIR; 714 | }; 715 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { 716 | isa = PBXReferenceProxy; 717 | fileType = archive.ar; 718 | path = libcxxreact.a; 719 | remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; 720 | sourceTree = BUILT_PRODUCTS_DIR; 721 | }; 722 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { 723 | isa = PBXReferenceProxy; 724 | fileType = archive.ar; 725 | path = libjschelpers.a; 726 | remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; 727 | sourceTree = BUILT_PRODUCTS_DIR; 728 | }; 729 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { 730 | isa = PBXReferenceProxy; 731 | fileType = archive.ar; 732 | path = libjschelpers.a; 733 | remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; 734 | sourceTree = BUILT_PRODUCTS_DIR; 735 | }; 736 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { 737 | isa = PBXReferenceProxy; 738 | fileType = archive.ar; 739 | path = libRCTAnimation.a; 740 | remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 741 | sourceTree = BUILT_PRODUCTS_DIR; 742 | }; 743 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { 744 | isa = PBXReferenceProxy; 745 | fileType = archive.ar; 746 | path = "libRCTAnimation-tvOS.a"; 747 | remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 748 | sourceTree = BUILT_PRODUCTS_DIR; 749 | }; 750 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 751 | isa = PBXReferenceProxy; 752 | fileType = archive.ar; 753 | path = libRCTLinking.a; 754 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 755 | sourceTree = BUILT_PRODUCTS_DIR; 756 | }; 757 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 758 | isa = PBXReferenceProxy; 759 | fileType = archive.ar; 760 | path = libRCTText.a; 761 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 762 | sourceTree = BUILT_PRODUCTS_DIR; 763 | }; 764 | /* End PBXReferenceProxy section */ 765 | 766 | /* Begin PBXResourcesBuildPhase section */ 767 | 00E356EC1AD99517003FC87E /* Resources */ = { 768 | isa = PBXResourcesBuildPhase; 769 | buildActionMask = 2147483647; 770 | files = ( 771 | ); 772 | runOnlyForDeploymentPostprocessing = 0; 773 | }; 774 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 775 | isa = PBXResourcesBuildPhase; 776 | buildActionMask = 2147483647; 777 | files = ( 778 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 779 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 780 | 4B857C0479D7411A9141831E /* EBGaramond08-Italic.ttf in Resources */, 781 | 0FA104C2A0AB4787A87C57D5 /* EBGaramond08-Regular.ttf in Resources */, 782 | ECBA3CC1FA5A4D1B84CC75A7 /* EBGaramond12-Regular.ttf in Resources */, 783 | F849628F93804E3ABD55E80A /* texgyreadventor-regular.ttf in Resources */, 784 | A56CB18E034347ACA783702A /* EBGaramond12-Italic.ttf in Resources */, 785 | ED4AE332BF5D4993893370ED /* texgyreadventor-bold.ttf in Resources */, 786 | ); 787 | runOnlyForDeploymentPostprocessing = 0; 788 | }; 789 | /* End PBXResourcesBuildPhase section */ 790 | 791 | /* Begin PBXShellScriptBuildPhase section */ 792 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 793 | isa = PBXShellScriptBuildPhase; 794 | buildActionMask = 2147483647; 795 | files = ( 796 | ); 797 | inputPaths = ( 798 | ); 799 | name = "Bundle React Native code and images"; 800 | outputPaths = ( 801 | ); 802 | runOnlyForDeploymentPostprocessing = 0; 803 | shellPath = /bin/sh; 804 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; 805 | }; 806 | /* End PBXShellScriptBuildPhase section */ 807 | 808 | /* Begin PBXSourcesBuildPhase section */ 809 | 00E356EA1AD99517003FC87E /* Sources */ = { 810 | isa = PBXSourcesBuildPhase; 811 | buildActionMask = 2147483647; 812 | files = ( 813 | 00E356F31AD99517003FC87E /* ArtistExampleTests.m in Sources */, 814 | ); 815 | runOnlyForDeploymentPostprocessing = 0; 816 | }; 817 | 13B07F871A680F5B00A75B9A /* Sources */ = { 818 | isa = PBXSourcesBuildPhase; 819 | buildActionMask = 2147483647; 820 | files = ( 821 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 822 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 823 | ); 824 | runOnlyForDeploymentPostprocessing = 0; 825 | }; 826 | /* End PBXSourcesBuildPhase section */ 827 | 828 | /* Begin PBXTargetDependency section */ 829 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 830 | isa = PBXTargetDependency; 831 | target = 13B07F861A680F5B00A75B9A /* ArtistExample */; 832 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 833 | }; 834 | /* End PBXTargetDependency section */ 835 | 836 | /* Begin PBXVariantGroup section */ 837 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 838 | isa = PBXVariantGroup; 839 | children = ( 840 | 13B07FB21A68108700A75B9A /* Base */, 841 | ); 842 | name = LaunchScreen.xib; 843 | path = ArtistExample; 844 | sourceTree = ""; 845 | }; 846 | /* End PBXVariantGroup section */ 847 | 848 | /* Begin XCBuildConfiguration section */ 849 | 00E356F61AD99517003FC87E /* Debug */ = { 850 | isa = XCBuildConfiguration; 851 | buildSettings = { 852 | BUNDLE_LOADER = "$(TEST_HOST)"; 853 | GCC_PREPROCESSOR_DEFINITIONS = ( 854 | "DEBUG=1", 855 | "$(inherited)", 856 | ); 857 | INFOPLIST_FILE = ArtistExampleTests/Info.plist; 858 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 859 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 860 | PRODUCT_NAME = "$(TARGET_NAME)"; 861 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ArtistExample.app/ArtistExample"; 862 | }; 863 | name = Debug; 864 | }; 865 | 00E356F71AD99517003FC87E /* Release */ = { 866 | isa = XCBuildConfiguration; 867 | buildSettings = { 868 | BUNDLE_LOADER = "$(TEST_HOST)"; 869 | COPY_PHASE_STRIP = NO; 870 | INFOPLIST_FILE = ArtistExampleTests/Info.plist; 871 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 872 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 873 | PRODUCT_NAME = "$(TARGET_NAME)"; 874 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ArtistExample.app/ArtistExample"; 875 | }; 876 | name = Release; 877 | }; 878 | 13B07F941A680F5B00A75B9A /* Debug */ = { 879 | isa = XCBuildConfiguration; 880 | buildSettings = { 881 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 882 | CURRENT_PROJECT_VERSION = 1; 883 | DEAD_CODE_STRIPPING = NO; 884 | INFOPLIST_FILE = ArtistExample/Info.plist; 885 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 886 | OTHER_LDFLAGS = ( 887 | "$(inherited)", 888 | "-ObjC", 889 | "-lc++", 890 | ); 891 | PRODUCT_NAME = ArtistExample; 892 | VERSIONING_SYSTEM = "apple-generic"; 893 | }; 894 | name = Debug; 895 | }; 896 | 13B07F951A680F5B00A75B9A /* Release */ = { 897 | isa = XCBuildConfiguration; 898 | buildSettings = { 899 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 900 | CURRENT_PROJECT_VERSION = 1; 901 | INFOPLIST_FILE = ArtistExample/Info.plist; 902 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 903 | OTHER_LDFLAGS = ( 904 | "$(inherited)", 905 | "-ObjC", 906 | "-lc++", 907 | ); 908 | PRODUCT_NAME = ArtistExample; 909 | VERSIONING_SYSTEM = "apple-generic"; 910 | }; 911 | name = Release; 912 | }; 913 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 914 | isa = XCBuildConfiguration; 915 | buildSettings = { 916 | ALWAYS_SEARCH_USER_PATHS = NO; 917 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 918 | CLANG_CXX_LIBRARY = "libc++"; 919 | CLANG_ENABLE_MODULES = YES; 920 | CLANG_ENABLE_OBJC_ARC = YES; 921 | CLANG_WARN_BOOL_CONVERSION = YES; 922 | CLANG_WARN_CONSTANT_CONVERSION = YES; 923 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 924 | CLANG_WARN_EMPTY_BODY = YES; 925 | CLANG_WARN_ENUM_CONVERSION = YES; 926 | CLANG_WARN_INT_CONVERSION = YES; 927 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 928 | CLANG_WARN_UNREACHABLE_CODE = YES; 929 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 930 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 931 | COPY_PHASE_STRIP = NO; 932 | ENABLE_STRICT_OBJC_MSGSEND = YES; 933 | GCC_C_LANGUAGE_STANDARD = gnu99; 934 | GCC_DYNAMIC_NO_PIC = NO; 935 | GCC_OPTIMIZATION_LEVEL = 0; 936 | GCC_PREPROCESSOR_DEFINITIONS = ( 937 | "DEBUG=1", 938 | "$(inherited)", 939 | ); 940 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 941 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 942 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 943 | GCC_WARN_UNDECLARED_SELECTOR = YES; 944 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 945 | GCC_WARN_UNUSED_FUNCTION = YES; 946 | GCC_WARN_UNUSED_VARIABLE = YES; 947 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 948 | MTL_ENABLE_DEBUG_INFO = YES; 949 | ONLY_ACTIVE_ARCH = YES; 950 | SDKROOT = iphoneos; 951 | }; 952 | name = Debug; 953 | }; 954 | 83CBBA211A601CBA00E9B192 /* Release */ = { 955 | isa = XCBuildConfiguration; 956 | buildSettings = { 957 | ALWAYS_SEARCH_USER_PATHS = NO; 958 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 959 | CLANG_CXX_LIBRARY = "libc++"; 960 | CLANG_ENABLE_MODULES = YES; 961 | CLANG_ENABLE_OBJC_ARC = YES; 962 | CLANG_WARN_BOOL_CONVERSION = YES; 963 | CLANG_WARN_CONSTANT_CONVERSION = YES; 964 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 965 | CLANG_WARN_EMPTY_BODY = YES; 966 | CLANG_WARN_ENUM_CONVERSION = YES; 967 | CLANG_WARN_INT_CONVERSION = YES; 968 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 969 | CLANG_WARN_UNREACHABLE_CODE = YES; 970 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 971 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 972 | COPY_PHASE_STRIP = YES; 973 | ENABLE_NS_ASSERTIONS = NO; 974 | ENABLE_STRICT_OBJC_MSGSEND = YES; 975 | GCC_C_LANGUAGE_STANDARD = gnu99; 976 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 977 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 978 | GCC_WARN_UNDECLARED_SELECTOR = YES; 979 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 980 | GCC_WARN_UNUSED_FUNCTION = YES; 981 | GCC_WARN_UNUSED_VARIABLE = YES; 982 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 983 | MTL_ENABLE_DEBUG_INFO = NO; 984 | SDKROOT = iphoneos; 985 | VALIDATE_PRODUCT = YES; 986 | }; 987 | name = Release; 988 | }; 989 | /* End XCBuildConfiguration section */ 990 | 991 | /* Begin XCConfigurationList section */ 992 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ArtistExampleTests" */ = { 993 | isa = XCConfigurationList; 994 | buildConfigurations = ( 995 | 00E356F61AD99517003FC87E /* Debug */, 996 | 00E356F71AD99517003FC87E /* Release */, 997 | ); 998 | defaultConfigurationIsVisible = 0; 999 | defaultConfigurationName = Release; 1000 | }; 1001 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ArtistExample" */ = { 1002 | isa = XCConfigurationList; 1003 | buildConfigurations = ( 1004 | 13B07F941A680F5B00A75B9A /* Debug */, 1005 | 13B07F951A680F5B00A75B9A /* Release */, 1006 | ); 1007 | defaultConfigurationIsVisible = 0; 1008 | defaultConfigurationName = Release; 1009 | }; 1010 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ArtistExample" */ = { 1011 | isa = XCConfigurationList; 1012 | buildConfigurations = ( 1013 | 83CBBA201A601CBA00E9B192 /* Debug */, 1014 | 83CBBA211A601CBA00E9B192 /* Release */, 1015 | ); 1016 | defaultConfigurationIsVisible = 0; 1017 | defaultConfigurationName = Release; 1018 | }; 1019 | /* End XCConfigurationList section */ 1020 | }; 1021 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1022 | } 1023 | -------------------------------------------------------------------------------- /data/schema.graphql: -------------------------------------------------------------------------------- 1 | schema { 2 | query: RootQueryType 3 | } 4 | 5 | # One item in an aggregation 6 | type AggregationCount { 7 | # A globally unique ID. 8 | __id: ID! 9 | 10 | # A type-specific ID. 11 | id: String! 12 | name: String 13 | count: Int 14 | } 15 | 16 | type Article implements Node { 17 | # A globally unique ID. 18 | __id: ID! 19 | 20 | # A type-specific ID. 21 | id: String! 22 | cached: Int 23 | title: String 24 | published_at(format: String, timezone: String, convert_to_utc: Boolean): String 25 | updated_at(format: String, timezone: String, convert_to_utc: Boolean): String 26 | thumbnail_title: String 27 | thumbnail_teaser: String 28 | author: Author 29 | thumbnail_image: Image 30 | slug: String 31 | href: String 32 | } 33 | 34 | enum ArticleSorts { 35 | PUBLISHED_AT_ASC 36 | PUBLISHED_AT_DESC 37 | } 38 | 39 | type Artist implements Node { 40 | # A globally unique ID. 41 | __id: ID! 42 | 43 | # A type-specific ID. 44 | id: String! 45 | 46 | # A type-specific Gravity Mongo Document ID. 47 | _id: String! 48 | cached: Int 49 | href: String 50 | 51 | # Use this attribute to sort by when sorting a collection of Artists 52 | sortable_id: String 53 | name: String 54 | initials(length: Int = 3): String 55 | gender: String 56 | years: String 57 | is_public: Boolean 58 | is_consignable: Boolean 59 | public: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 60 | consignable: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 61 | 62 | # Only specific Artists should show a link to auction results. 63 | is_display_auction_link: Boolean 64 | display_auction_link: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 65 | has_metadata: Boolean 66 | hometown: String 67 | location: String 68 | nationality: String 69 | birthday: String 70 | deathday: String 71 | 72 | # A string of the form "Nationality, Birthday (or Birthday-Deathday)" 73 | formatted_nationality_and_birthday: String 74 | 75 | # The Artist biography article written by Artsy 76 | biography: Article 77 | alternate_names: [String] 78 | meta: ArtistMeta 79 | blurb(format: Format): String 80 | biography_blurb( 81 | # If true, will return featured bio over Artsy one. 82 | partner_bio: Boolean = false 83 | format: Format 84 | ): ArtistBlurb 85 | is_shareable: Boolean 86 | bio: String 87 | counts: ArtistCounts 88 | artworks( 89 | # The number of Artworks to return 90 | size: Int 91 | page: Int 92 | sort: ArtworkSorts 93 | published: Boolean = true 94 | filter: [ArtistArtworksFilters] 95 | exclude: [String] 96 | ): [Artwork] 97 | 98 | # A string showing the total number of works and those for sale 99 | formatted_artworks_count: String 100 | image: Image 101 | artists( 102 | # The number of Artists to return 103 | size: Int 104 | exclude_artists_without_artworks: Boolean = true 105 | ): [Artist] 106 | contemporary( 107 | # The number of Artists to return 108 | size: Int 109 | exclude_artists_without_artworks: Boolean = true 110 | ): [Artist] 111 | carousel: ArtistCarousel 112 | statuses: ArtistStatuses 113 | 114 | # Custom-sorted list of shows for an artist, in order of significance. 115 | exhibition_highlights( 116 | # The number of Shows to return 117 | size: Int = 5 118 | ): [Show] 119 | partner_shows( 120 | at_a_fair: Boolean 121 | active: Boolean 122 | status: String 123 | 124 | # The number of PartnerShows to return 125 | size: Int 126 | solo_show: Boolean 127 | top_tier: Boolean 128 | is_reference: Boolean 129 | visible_to_public: Boolean 130 | sort: PartnerShowSorts 131 | ): [PartnerShow] @deprecated(reason: "Prefer to use shows attribute") 132 | shows( 133 | at_a_fair: Boolean 134 | active: Boolean 135 | status: String 136 | 137 | # The number of PartnerShows to return 138 | size: Int 139 | solo_show: Boolean 140 | top_tier: Boolean 141 | is_reference: Boolean 142 | visible_to_public: Boolean 143 | sort: PartnerShowSorts 144 | ): [Show] 145 | partner_artists( 146 | # The number of PartnerArtists to return 147 | size: Int 148 | ): [PartnerArtist] 149 | sales( 150 | live: Boolean 151 | is_auction: Boolean 152 | 153 | # The number of Sales to return 154 | size: Int 155 | sort: SaleSorts 156 | ): [Sale] 157 | articles(sort: ArticleSorts, limit: Int): [Article] 158 | } 159 | 160 | enum ArtistArtworksFilters { 161 | IS_FOR_SALE 162 | IS_NOT_FOR_SALE 163 | } 164 | 165 | type ArtistBlurb { 166 | text: String 167 | credit: String 168 | 169 | # The partner id of the partner who submitted the featured bio. 170 | partner_id: String 171 | } 172 | 173 | type ArtistCarousel { 174 | images: [Image] 175 | } 176 | 177 | type ArtistCounts { 178 | artworks( 179 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 180 | format: String 181 | label: String 182 | ): FormattedNumber 183 | follows( 184 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 185 | format: String 186 | label: String 187 | ): FormattedNumber 188 | for_sale_artworks( 189 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 190 | format: String 191 | label: String 192 | ): FormattedNumber 193 | partner_shows( 194 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 195 | format: String 196 | label: String 197 | ): FormattedNumber 198 | related_artists( 199 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 200 | format: String 201 | label: String 202 | ): FormattedNumber 203 | articles( 204 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 205 | format: String 206 | label: String 207 | ): FormattedNumber 208 | } 209 | 210 | type ArtistItem implements Node { 211 | # A globally unique ID. 212 | __id: ID! 213 | 214 | # A type-specific ID. 215 | id: String! 216 | 217 | # A type-specific Gravity Mongo Document ID. 218 | _id: String! 219 | cached: Int 220 | href: String 221 | 222 | # Use this attribute to sort by when sorting a collection of Artists 223 | sortable_id: String 224 | name: String 225 | initials(length: Int = 3): String 226 | gender: String 227 | years: String 228 | is_public: Boolean 229 | is_consignable: Boolean 230 | public: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 231 | consignable: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 232 | 233 | # Only specific Artists should show a link to auction results. 234 | is_display_auction_link: Boolean 235 | display_auction_link: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 236 | has_metadata: Boolean 237 | hometown: String 238 | location: String 239 | nationality: String 240 | birthday: String 241 | deathday: String 242 | 243 | # A string of the form "Nationality, Birthday (or Birthday-Deathday)" 244 | formatted_nationality_and_birthday: String 245 | 246 | # The Artist biography article written by Artsy 247 | biography: Article 248 | alternate_names: [String] 249 | meta: ArtistMeta 250 | blurb(format: Format): String 251 | biography_blurb( 252 | # If true, will return featured bio over Artsy one. 253 | partner_bio: Boolean = false 254 | format: Format 255 | ): ArtistBlurb 256 | is_shareable: Boolean 257 | bio: String 258 | counts: ArtistCounts 259 | artworks( 260 | # The number of Artworks to return 261 | size: Int 262 | page: Int 263 | sort: ArtworkSorts 264 | published: Boolean = true 265 | filter: [ArtistArtworksFilters] 266 | exclude: [String] 267 | ): [Artwork] 268 | 269 | # A string showing the total number of works and those for sale 270 | formatted_artworks_count: String 271 | image: Image 272 | artists( 273 | # The number of Artists to return 274 | size: Int 275 | exclude_artists_without_artworks: Boolean = true 276 | ): [Artist] 277 | contemporary( 278 | # The number of Artists to return 279 | size: Int 280 | exclude_artists_without_artworks: Boolean = true 281 | ): [Artist] 282 | carousel: ArtistCarousel 283 | statuses: ArtistStatuses 284 | 285 | # Custom-sorted list of shows for an artist, in order of significance. 286 | exhibition_highlights( 287 | # The number of Shows to return 288 | size: Int = 5 289 | ): [Show] 290 | partner_shows( 291 | at_a_fair: Boolean 292 | active: Boolean 293 | status: String 294 | 295 | # The number of PartnerShows to return 296 | size: Int 297 | solo_show: Boolean 298 | top_tier: Boolean 299 | is_reference: Boolean 300 | visible_to_public: Boolean 301 | sort: PartnerShowSorts 302 | ): [PartnerShow] @deprecated(reason: "Prefer to use shows attribute") 303 | shows( 304 | at_a_fair: Boolean 305 | active: Boolean 306 | status: String 307 | 308 | # The number of PartnerShows to return 309 | size: Int 310 | solo_show: Boolean 311 | top_tier: Boolean 312 | is_reference: Boolean 313 | visible_to_public: Boolean 314 | sort: PartnerShowSorts 315 | ): [Show] 316 | partner_artists( 317 | # The number of PartnerArtists to return 318 | size: Int 319 | ): [PartnerArtist] 320 | sales( 321 | live: Boolean 322 | is_auction: Boolean 323 | 324 | # The number of Sales to return 325 | size: Int 326 | sort: SaleSorts 327 | ): [Sale] 328 | articles(sort: ArticleSorts, limit: Int): [Article] 329 | } 330 | 331 | type ArtistMeta { 332 | title: String 333 | description: String 334 | } 335 | 336 | type ArtistSearchEntity implements Node { 337 | # A globally unique ID. 338 | __id: ID! 339 | 340 | # A type-specific ID. 341 | id: String! 342 | 343 | # A type-specific Gravity Mongo Document ID. 344 | _id: String! 345 | cached: Int 346 | href: String 347 | 348 | # Use this attribute to sort by when sorting a collection of Artists 349 | sortable_id: String 350 | name: String 351 | initials(length: Int = 3): String 352 | gender: String 353 | years: String 354 | is_public: Boolean 355 | is_consignable: Boolean 356 | public: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 357 | consignable: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 358 | 359 | # Only specific Artists should show a link to auction results. 360 | is_display_auction_link: Boolean 361 | display_auction_link: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 362 | has_metadata: Boolean 363 | hometown: String 364 | location: String 365 | nationality: String 366 | birthday: String 367 | deathday: String 368 | 369 | # A string of the form "Nationality, Birthday (or Birthday-Deathday)" 370 | formatted_nationality_and_birthday: String 371 | 372 | # The Artist biography article written by Artsy 373 | biography: Article 374 | alternate_names: [String] 375 | meta: ArtistMeta 376 | blurb(format: Format): String 377 | biography_blurb( 378 | # If true, will return featured bio over Artsy one. 379 | partner_bio: Boolean = false 380 | format: Format 381 | ): ArtistBlurb 382 | is_shareable: Boolean 383 | bio: String 384 | counts: ArtistCounts 385 | artworks( 386 | # The number of Artworks to return 387 | size: Int 388 | page: Int 389 | sort: ArtworkSorts 390 | published: Boolean = true 391 | filter: [ArtistArtworksFilters] 392 | exclude: [String] 393 | ): [Artwork] 394 | 395 | # A string showing the total number of works and those for sale 396 | formatted_artworks_count: String 397 | image: Image 398 | artists( 399 | # The number of Artists to return 400 | size: Int 401 | exclude_artists_without_artworks: Boolean = true 402 | ): [Artist] 403 | contemporary( 404 | # The number of Artists to return 405 | size: Int 406 | exclude_artists_without_artworks: Boolean = true 407 | ): [Artist] 408 | carousel: ArtistCarousel 409 | statuses: ArtistStatuses 410 | 411 | # Custom-sorted list of shows for an artist, in order of significance. 412 | exhibition_highlights( 413 | # The number of Shows to return 414 | size: Int = 5 415 | ): [Show] 416 | partner_shows( 417 | at_a_fair: Boolean 418 | active: Boolean 419 | status: String 420 | 421 | # The number of PartnerShows to return 422 | size: Int 423 | solo_show: Boolean 424 | top_tier: Boolean 425 | is_reference: Boolean 426 | visible_to_public: Boolean 427 | sort: PartnerShowSorts 428 | ): [PartnerShow] @deprecated(reason: "Prefer to use shows attribute") 429 | shows( 430 | at_a_fair: Boolean 431 | active: Boolean 432 | status: String 433 | 434 | # The number of PartnerShows to return 435 | size: Int 436 | solo_show: Boolean 437 | top_tier: Boolean 438 | is_reference: Boolean 439 | visible_to_public: Boolean 440 | sort: PartnerShowSorts 441 | ): [Show] 442 | partner_artists( 443 | # The number of PartnerArtists to return 444 | size: Int 445 | ): [PartnerArtist] 446 | sales( 447 | live: Boolean 448 | is_auction: Boolean 449 | 450 | # The number of Sales to return 451 | size: Int 452 | sort: SaleSorts 453 | ): [Sale] 454 | articles(sort: ArticleSorts, limit: Int): [Article] 455 | } 456 | 457 | enum ArtistSorts { 458 | sortable_id_asc 459 | sortable_id_desc 460 | trending_desc 461 | } 462 | 463 | type ArtistStatuses { 464 | artworks: Boolean 465 | shows: Boolean 466 | cv: Boolean 467 | artists: Boolean 468 | contemporary: Boolean 469 | articles: Boolean 470 | auction_lots: Boolean 471 | biography: Boolean 472 | } 473 | 474 | type Artwork implements Node { 475 | # A globally unique ID. 476 | __id: ID! 477 | 478 | # A type-specific ID. 479 | id: String! 480 | 481 | # A type-specific Gravity Mongo Document ID. 482 | _id: String! 483 | cached: Int 484 | to_s: String 485 | href: String 486 | title: String 487 | category: String 488 | medium: String 489 | date: String 490 | image_rights: String 491 | website: String 492 | collecting_institution: String 493 | partner( 494 | # Use whatever is in the original response instead of making a request 495 | shallow: Boolean 496 | ): Partner 497 | 498 | # Returns an HTML string representing the embedded content (video) 499 | embed(width: Int = 853, height: Int = 450, autoplay: Boolean = false): String 500 | can_share_image: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 501 | is_embeddable_video: Boolean 502 | is_shareable: Boolean 503 | is_hangable: Boolean 504 | 505 | # True for inquireable artworks that have an exact price. 506 | is_purchasable: Boolean 507 | 508 | # Do we want to encourage inquiries on this work? 509 | is_inquireable: Boolean 510 | 511 | # Are we able to display a contact form on artwork pages? 512 | is_contactable: Boolean @deprecated(reason: "Prefer to use is_inquireable") 513 | 514 | # Is this artwork part of an auction? 515 | is_in_auction: Boolean 516 | 517 | # Is this artwork part of a current show 518 | is_in_show: Boolean 519 | is_for_sale: Boolean 520 | 521 | # Is this artwork part of an auction that is currently running? 522 | is_biddable: Boolean 523 | is_unique: Boolean 524 | is_sold: Boolean 525 | is_ecommerce: Boolean @deprecated(reason: "Should not be used to determine anything UI-level") 526 | 527 | # Whether work can be purchased through e-commerce 528 | is_acquireable: Boolean 529 | 530 | # When in an auction, can the work be bought before any bids are placed 531 | is_buy_nowable: Boolean 532 | is_comparable_with_auction_results: Boolean 533 | is_downloadable: Boolean 534 | is_price_hidden: Boolean 535 | is_price_range: Boolean 536 | availability: String 537 | sale_message: String 538 | artist( 539 | # Use whatever is in the original response instead of making a request 540 | shallow: Boolean 541 | ): Artist 542 | price: String 543 | contact_label: String 544 | cultural_maker: String 545 | artists( 546 | # Use whatever is in the original response instead of making a request 547 | shallow: Boolean 548 | ): [Artist] 549 | artist_names: String 550 | dimensions: dimensions 551 | image: Image 552 | images(size: Int): [Image] 553 | 554 | # Returns the associated Fair/Sale/PartnerShow 555 | context: ArtworkContext 556 | 557 | # Returns the highlighted shows and articles 558 | highlights: [Highlighted] 559 | articles(size: Int): [Article] 560 | shows(size: Int, active: Boolean, at_a_fair: Boolean, sort: PartnerShowSorts): [PartnerShow] 561 | show(size: Int, active: Boolean, at_a_fair: Boolean, sort: PartnerShowSorts): PartnerShow 562 | sale_artwork: SaleArtwork 563 | sale: Sale 564 | fair: Fair 565 | edition_of: String 566 | edition_sets: [EditionSet] 567 | description(format: Format): String 568 | exhibition_history(format: Format): String 569 | provenance(format: Format): String 570 | signature(format: Format): String 571 | additional_information(format: Format): String 572 | literature(format: Format): String 573 | publisher(format: Format): String 574 | manufacturer(format: Format): String 575 | series(format: Format): String 576 | meta: ArtworkMeta 577 | related(size: Int): [Artwork] 578 | layer(id: String): ArtworkLayer 579 | layers: [ArtworkLayer] 580 | } 581 | 582 | enum ArtworkAggregation { 583 | PRICE_RANGE 584 | DIMENSION_RANGE 585 | COLOR 586 | PERIOD 587 | MAJOR_PERIOD 588 | PARTNER_CITY 589 | MEDIUM 590 | GALLERY 591 | INSTITUTION 592 | TOTAL 593 | FOLLOWED_ARTISTS 594 | MERCHANDISABLE_ARTISTS 595 | } 596 | 597 | union ArtworkContext = ArtworkContextAuction | ArtworkContextSale | ArtworkContextFair | ArtworkContextPartnerShow 598 | 599 | type ArtworkContextAuction { 600 | # A globally unique ID. 601 | __id: ID! 602 | 603 | # A type-specific ID. 604 | id: String! 605 | 606 | # A type-specific Gravity Mongo Document ID. 607 | _id: String! 608 | cached: Int 609 | name: String 610 | href: String 611 | description: String 612 | sale_type: String 613 | is_auction: Boolean 614 | is_auction_promo: Boolean 615 | is_preview: Boolean 616 | is_open: Boolean 617 | is_live_open: Boolean 618 | is_closed: Boolean 619 | is_with_buyers_premium: Boolean 620 | auction_state: String @deprecated(reason: "Favor `status` for consistency with other models") 621 | status: String 622 | registration_ends_at(format: String, timezone: String, convert_to_utc: Boolean): String 623 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 624 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 625 | live_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 626 | event_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 627 | event_end_at(format: String, timezone: String, convert_to_utc: Boolean): String 628 | currency: String 629 | sale_artworks(page: Int = 1, size: Int = 25, all: Boolean = false): [SaleArtwork] 630 | artworks( 631 | page: Int = 1 632 | size: Int = 25 633 | all: Boolean = false 634 | 635 | # List of artwork IDs to exclude from the response (irrespective of size) 636 | exclude: [String] 637 | ): [Artwork] 638 | cover_image: Image 639 | sale_artwork(id: String!): SaleArtwork 640 | profile: Profile 641 | 642 | # A bid increment policy that explains minimum bids in ranges. 643 | bid_increments: [BidIncrement] 644 | 645 | # Auction's buyer's premium policy. 646 | buyers_premium: [BuyersPremium] 647 | } 648 | 649 | type ArtworkContextFair { 650 | # A globally unique ID. 651 | __id: ID! 652 | 653 | # A type-specific ID. 654 | id: String! 655 | 656 | # A type-specific Gravity Mongo Document ID. 657 | _id: String! 658 | cached: Int 659 | banner_size: String 660 | profile: Profile 661 | has_full_feature: Boolean 662 | has_homepage_section: Boolean 663 | has_listing: Boolean 664 | has_large_banner: Boolean 665 | href: String 666 | image: Image 667 | location: Location 668 | 669 | # Are we currently in the fair's active period? 670 | is_active: Boolean 671 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 672 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 673 | name: String 674 | tagline: String 675 | published: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 676 | is_published: Boolean 677 | organizer: organizer 678 | } 679 | 680 | type ArtworkContextPartnerShow implements Node { 681 | # A globally unique ID. 682 | __id: ID! 683 | 684 | # A type-specific ID. 685 | id: String! 686 | 687 | # A type-specific Gravity Mongo Document ID. 688 | _id: String! 689 | cached: Int 690 | href: String 691 | kind: String 692 | 693 | # The exhibition title 694 | name: String 695 | description: String 696 | type: String 697 | displayable: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 698 | 699 | # Gravity doesn’t expose the `active` flag. Temporarily re-state its logic. 700 | is_active: Boolean 701 | is_displayable: Boolean 702 | is_fair_booth: Boolean 703 | press_release(format: Format): String 704 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 705 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 706 | 707 | # A formatted description of the start to end dates 708 | exhibition_period: String 709 | artists: [Artist] 710 | partner: Partner 711 | fair: Fair 712 | location: Location 713 | status: String 714 | 715 | # A formatted update on upcoming status changes 716 | status_update( 717 | # Before this many days no update will be generated 718 | max_days: Int 719 | ): String 720 | events: [PartnerShowEventType] 721 | counts: PartnerShowCounts 722 | artworks( 723 | # Number of artworks to return 724 | size: Int = 25 725 | published: Boolean = true 726 | page: Int = 1 727 | all: Boolean 728 | for_sale: Boolean 729 | 730 | # List of artwork IDs to exclude from the response (irrespective of size) 731 | exclude: [String] 732 | ): [Artwork] 733 | meta_image: Image 734 | cover_image: Image 735 | images( 736 | # Number of images to return 737 | size: Int 738 | 739 | # Pass true/false to include cover or not 740 | default: Boolean 741 | page: Int 742 | ): [Image] 743 | } 744 | 745 | type ArtworkContextSale { 746 | # A globally unique ID. 747 | __id: ID! 748 | 749 | # A type-specific ID. 750 | id: String! 751 | 752 | # A type-specific Gravity Mongo Document ID. 753 | _id: String! 754 | cached: Int 755 | name: String 756 | href: String 757 | description: String 758 | sale_type: String 759 | is_auction: Boolean 760 | is_auction_promo: Boolean 761 | is_preview: Boolean 762 | is_open: Boolean 763 | is_live_open: Boolean 764 | is_closed: Boolean 765 | is_with_buyers_premium: Boolean 766 | auction_state: String @deprecated(reason: "Favor `status` for consistency with other models") 767 | status: String 768 | registration_ends_at(format: String, timezone: String, convert_to_utc: Boolean): String 769 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 770 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 771 | live_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 772 | event_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 773 | event_end_at(format: String, timezone: String, convert_to_utc: Boolean): String 774 | currency: String 775 | sale_artworks(page: Int = 1, size: Int = 25, all: Boolean = false): [SaleArtwork] 776 | artworks( 777 | page: Int = 1 778 | size: Int = 25 779 | all: Boolean = false 780 | 781 | # List of artwork IDs to exclude from the response (irrespective of size) 782 | exclude: [String] 783 | ): [Artwork] 784 | cover_image: Image 785 | sale_artwork(id: String!): SaleArtwork 786 | profile: Profile 787 | 788 | # A bid increment policy that explains minimum bids in ranges. 789 | bid_increments: [BidIncrement] 790 | 791 | # Auction's buyer's premium policy. 792 | buyers_premium: [BuyersPremium] 793 | } 794 | 795 | type ArtworkLayer { 796 | # A globally unique ID. 797 | __id: ID! 798 | 799 | # A type-specific ID. 800 | id: String! 801 | type: String 802 | name: String 803 | href: String 804 | description: String 805 | artworks: [Artwork] 806 | } 807 | 808 | type ArtworkMeta { 809 | title: String 810 | description(limit: Int = 155): String 811 | image: String 812 | } 813 | 814 | # The results for one of the requested aggregations 815 | type ArtworksAggregationResults { 816 | slice: ArtworkAggregation 817 | counts: [AggregationCount] 818 | } 819 | 820 | type ArtworkSearchEntity implements Node { 821 | # A globally unique ID. 822 | __id: ID! 823 | 824 | # A type-specific ID. 825 | id: String! 826 | 827 | # A type-specific Gravity Mongo Document ID. 828 | _id: String! 829 | cached: Int 830 | to_s: String 831 | href: String 832 | title: String 833 | category: String 834 | medium: String 835 | date: String 836 | image_rights: String 837 | website: String 838 | collecting_institution: String 839 | partner( 840 | # Use whatever is in the original response instead of making a request 841 | shallow: Boolean 842 | ): Partner 843 | 844 | # Returns an HTML string representing the embedded content (video) 845 | embed(width: Int = 853, height: Int = 450, autoplay: Boolean = false): String 846 | can_share_image: Boolean @deprecated(reason: "Favor `is_`-prefixed boolean attributes") 847 | is_embeddable_video: Boolean 848 | is_shareable: Boolean 849 | is_hangable: Boolean 850 | 851 | # True for inquireable artworks that have an exact price. 852 | is_purchasable: Boolean 853 | 854 | # Do we want to encourage inquiries on this work? 855 | is_inquireable: Boolean 856 | 857 | # Are we able to display a contact form on artwork pages? 858 | is_contactable: Boolean @deprecated(reason: "Prefer to use is_inquireable") 859 | 860 | # Is this artwork part of an auction? 861 | is_in_auction: Boolean 862 | 863 | # Is this artwork part of a current show 864 | is_in_show: Boolean 865 | is_for_sale: Boolean 866 | 867 | # Is this artwork part of an auction that is currently running? 868 | is_biddable: Boolean 869 | is_unique: Boolean 870 | is_sold: Boolean 871 | is_ecommerce: Boolean @deprecated(reason: "Should not be used to determine anything UI-level") 872 | 873 | # Whether work can be purchased through e-commerce 874 | is_acquireable: Boolean 875 | 876 | # When in an auction, can the work be bought before any bids are placed 877 | is_buy_nowable: Boolean 878 | is_comparable_with_auction_results: Boolean 879 | is_downloadable: Boolean 880 | is_price_hidden: Boolean 881 | is_price_range: Boolean 882 | availability: String 883 | sale_message: String 884 | artist( 885 | # Use whatever is in the original response instead of making a request 886 | shallow: Boolean 887 | ): Artist 888 | price: String 889 | contact_label: String 890 | cultural_maker: String 891 | artists( 892 | # Use whatever is in the original response instead of making a request 893 | shallow: Boolean 894 | ): [Artist] 895 | artist_names: String 896 | dimensions: dimensions 897 | image: Image 898 | images(size: Int): [Image] 899 | 900 | # Returns the associated Fair/Sale/PartnerShow 901 | context: ArtworkContext 902 | 903 | # Returns the highlighted shows and articles 904 | highlights: [Highlighted] 905 | articles(size: Int): [Article] 906 | shows(size: Int, active: Boolean, at_a_fair: Boolean, sort: PartnerShowSorts): [PartnerShow] 907 | show(size: Int, active: Boolean, at_a_fair: Boolean, sort: PartnerShowSorts): PartnerShow 908 | sale_artwork: SaleArtwork 909 | sale: Sale 910 | fair: Fair 911 | edition_of: String 912 | edition_sets: [EditionSet] 913 | description(format: Format): String 914 | exhibition_history(format: Format): String 915 | provenance(format: Format): String 916 | signature(format: Format): String 917 | additional_information(format: Format): String 918 | literature(format: Format): String 919 | publisher(format: Format): String 920 | manufacturer(format: Format): String 921 | series(format: Format): String 922 | meta: ArtworkMeta 923 | related(size: Int): [Artwork] 924 | layer(id: String): ArtworkLayer 925 | layers: [ArtworkLayer] 926 | } 927 | 928 | enum ArtworkSorts { 929 | title_asc 930 | title_desc 931 | created_at_asc 932 | created_at_desc 933 | deleted_at_asc 934 | deleted_at_desc 935 | iconicity_desc 936 | merchandisability_desc 937 | published_at_asc 938 | published_at_desc 939 | partner_updated_at_desc 940 | availability_desc 941 | } 942 | 943 | type Author { 944 | # A globally unique ID. 945 | __id: ID! 946 | 947 | # A type-specific ID. 948 | id: String! 949 | name: String 950 | profile_handle: String 951 | href: String @deprecated(reason: "Profiles have been removed and thus author hrefs don't exist anymore.") 952 | } 953 | 954 | type Bidder { 955 | # A globally unique ID. 956 | __id: ID! 957 | 958 | # A type-specific ID. 959 | id: String! 960 | created_at(format: String, timezone: String, convert_to_utc: Boolean): String 961 | pin: String 962 | sale: Sale 963 | qualified_for_bidding: Boolean 964 | } 965 | 966 | type BidderPosition { 967 | # A globally unique ID. 968 | __id: ID! 969 | 970 | # A type-specific ID. 971 | id: String! 972 | created_at(format: String, timezone: String, convert_to_utc: Boolean): String 973 | updated_at(format: String, timezone: String, convert_to_utc: Boolean): String 974 | processed_at(format: String, timezone: String, convert_to_utc: Boolean): String 975 | is_active: Boolean 976 | is_retracted: Boolean 977 | is_with_bid_max: Boolean 978 | is_winning: Boolean 979 | max_bid: BidderPositionMaxBid 980 | suggested_next_bid: BidderPositionSuggestedNextBid 981 | sale_artwork: SaleArtwork 982 | highest_bid: HighestBid 983 | display_max_bid_amount_dollars: String @deprecated(reason: "Favor `max_bid`") 984 | display_suggested_next_bid_dollars: String @deprecated(reason: "Favor `suggested_next_bid`") 985 | max_bid_amount_cents: Int @deprecated(reason: "Favor `max_bid`") 986 | suggested_next_bid_cents: Int @deprecated(reason: "Favor `suggested_next_bid`") 987 | } 988 | 989 | type BidderPositionMaxBid { 990 | # An amount of money expressed in cents. 991 | cents: Float 992 | 993 | # A pre-formatted price. 994 | display: String 995 | 996 | # A formatted price with various currency formatting options. 997 | amount( 998 | symbol: String 999 | thousand: String = "," 1000 | decimal: String = "." 1001 | 1002 | # Allows control of symbol position (%v = value, %s = symbol) 1003 | format: String = "%s%v" 1004 | precision: Int = 0 1005 | ): String 1006 | } 1007 | 1008 | type BidderPositionSuggestedNextBid { 1009 | # An amount of money expressed in cents. 1010 | cents: Float 1011 | 1012 | # A pre-formatted price. 1013 | display: String 1014 | 1015 | # A formatted price with various currency formatting options. 1016 | amount( 1017 | symbol: String 1018 | thousand: String = "," 1019 | decimal: String = "." 1020 | 1021 | # Allows control of symbol position (%v = value, %s = symbol) 1022 | format: String = "%s%v" 1023 | precision: Int = 0 1024 | ): String 1025 | } 1026 | 1027 | type BidIncrement { 1028 | from: Int 1029 | to: Int 1030 | amount: Int 1031 | } 1032 | 1033 | type BuyersPremium { 1034 | # A formatted price with various currency formatting options. 1035 | amount( 1036 | symbol: String 1037 | thousand: String = "," 1038 | decimal: String = "." 1039 | 1040 | # Allows control of symbol position (%v = value, %s = symbol) 1041 | format: String = "%s%v" 1042 | precision: Int = 0 1043 | ): String 1044 | cents: Int 1045 | percent: Float 1046 | } 1047 | 1048 | enum CategoryType { 1049 | GALLERY 1050 | INSTITUTION 1051 | } 1052 | 1053 | type coordinates { 1054 | lat: Float 1055 | lng: Float 1056 | } 1057 | 1058 | type CroppedImageUrl { 1059 | width: Int 1060 | height: Int 1061 | url: String 1062 | } 1063 | 1064 | type DaySchedule { 1065 | start_time: Int 1066 | end_time: Int 1067 | day_of_week: String 1068 | } 1069 | 1070 | type DeepZoom { 1071 | Image: DeepZoomImage 1072 | } 1073 | 1074 | type DeepZoomImage { 1075 | xmlns: String 1076 | Url: String 1077 | Format: String 1078 | TileSize: Int 1079 | Overlap: Int 1080 | Size: DeepZoomImageSize 1081 | } 1082 | 1083 | type DeepZoomImageSize { 1084 | Width: Int 1085 | Height: Int 1086 | } 1087 | 1088 | type dimensions { 1089 | in: String 1090 | cm: String 1091 | } 1092 | 1093 | type EditionSet { 1094 | # A globally unique ID. 1095 | __id: ID! 1096 | 1097 | # A type-specific ID. 1098 | id: String! 1099 | dimensions: dimensions 1100 | edition_of: String 1101 | is_acquireable: Boolean 1102 | is_sold: Boolean 1103 | is_for_sale: Boolean 1104 | price: String 1105 | } 1106 | 1107 | enum EventStatus { 1108 | current 1109 | running 1110 | closed 1111 | upcoming 1112 | } 1113 | 1114 | type ExternalPartner { 1115 | # A globally unique ID. 1116 | __id: ID! 1117 | 1118 | # A type-specific ID. 1119 | id: String! 1120 | name: String 1121 | city: String 1122 | } 1123 | 1124 | type Fair { 1125 | # A globally unique ID. 1126 | __id: ID! 1127 | 1128 | # A type-specific ID. 1129 | id: String! 1130 | 1131 | # A type-specific Gravity Mongo Document ID. 1132 | _id: String! 1133 | cached: Int 1134 | banner_size: String 1135 | profile: Profile 1136 | has_full_feature: Boolean 1137 | has_homepage_section: Boolean 1138 | has_listing: Boolean 1139 | has_large_banner: Boolean 1140 | href: String 1141 | image: Image 1142 | location: Location 1143 | 1144 | # Are we currently in the fair's active period? 1145 | is_active: Boolean 1146 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 1147 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 1148 | name: String 1149 | tagline: String 1150 | published: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 1151 | is_published: Boolean 1152 | organizer: organizer 1153 | } 1154 | 1155 | enum FairSorts { 1156 | CREATED_AT_ASC 1157 | CREATED_AT_DESC 1158 | START_AT_ASC 1159 | START_AT_DESC 1160 | NAME_ASC 1161 | NAME_DESC 1162 | } 1163 | 1164 | type FeaturedLinkItem { 1165 | # Attempt to get the ID of the entity of the FeaturedLink 1166 | id: String 1167 | title: String 1168 | initials(length: Int = 3): String 1169 | subtitle: String 1170 | href: String 1171 | image: Image 1172 | } 1173 | 1174 | type FilterArtworks { 1175 | # Artwork results. 1176 | hits: [Artwork] 1177 | total: Int 1178 | followed_artists_total: Int 1179 | 1180 | # Returns a list of merchandisable artists sorted by merch score. 1181 | merchandisable_artists: [Artist] 1182 | 1183 | # Returns aggregation counts for the given filter query. 1184 | aggregations: [ArtworksAggregationResults] 1185 | } 1186 | 1187 | type FilterPartners { 1188 | hits: [Partner] 1189 | total: Int 1190 | aggregations: [PartnersAggregationResults] 1191 | } 1192 | 1193 | type FollowArtistCounts { 1194 | artists: Int 1195 | } 1196 | 1197 | type FollowArtists { 1198 | artists: [Artist] 1199 | counts: FollowArtistCounts 1200 | } 1201 | 1202 | enum Format { 1203 | HTML 1204 | PLAIN 1205 | markdown 1206 | } 1207 | 1208 | # The `FormattedNumber` type represents a number that can optionally be returnedas 1209 | # a formatted String. It does not try to coerce the type. 1210 | scalar FormattedNumber 1211 | 1212 | type Gene implements Node { 1213 | # A globally unique ID. 1214 | __id: ID! 1215 | 1216 | # A type-specific ID. 1217 | id: String! 1218 | 1219 | # A type-specific Gravity Mongo Document ID. 1220 | _id: String! 1221 | cached: Int 1222 | 1223 | # Artworks Elastic Search results 1224 | filtered_artworks( 1225 | aggregation_partner_cities: [String] 1226 | aggregations: [ArtworkAggregation] 1227 | artist_id: String 1228 | color: String 1229 | dimension_range: String 1230 | extra_aggregation_gene_ids: [String] 1231 | include_artworks_by_followed_artists: Boolean 1232 | for_sale: Boolean 1233 | gene_id: String 1234 | gene_ids: [String] 1235 | height: String 1236 | width: String 1237 | 1238 | # A string from the list of allocations, or * to denote all mediums 1239 | medium: String 1240 | period: String 1241 | periods: [String] 1242 | major_periods: [String] 1243 | partner_id: ID 1244 | partner_cities: [String] 1245 | price_range: String 1246 | page: Int 1247 | size: Int 1248 | sort: String 1249 | ): FilterArtworks 1250 | href: String 1251 | name: String 1252 | description: String 1253 | image: Image 1254 | artists: [Artist] 1255 | trending_artists(sample: Int): [Artist] 1256 | } 1257 | 1258 | type GeneItem implements Node { 1259 | # A globally unique ID. 1260 | __id: ID! 1261 | 1262 | # A type-specific ID. 1263 | id: String! 1264 | 1265 | # A type-specific Gravity Mongo Document ID. 1266 | _id: String! 1267 | cached: Int 1268 | 1269 | # Artworks Elastic Search results 1270 | filtered_artworks( 1271 | aggregation_partner_cities: [String] 1272 | aggregations: [ArtworkAggregation] 1273 | artist_id: String 1274 | color: String 1275 | dimension_range: String 1276 | extra_aggregation_gene_ids: [String] 1277 | include_artworks_by_followed_artists: Boolean 1278 | for_sale: Boolean 1279 | gene_id: String 1280 | gene_ids: [String] 1281 | height: String 1282 | width: String 1283 | 1284 | # A string from the list of allocations, or * to denote all mediums 1285 | medium: String 1286 | period: String 1287 | periods: [String] 1288 | major_periods: [String] 1289 | partner_id: ID 1290 | partner_cities: [String] 1291 | price_range: String 1292 | page: Int 1293 | size: Int 1294 | sort: String 1295 | ): FilterArtworks 1296 | href: String 1297 | name: String 1298 | description: String 1299 | image: Image 1300 | artists: [Artist] 1301 | trending_artists(sample: Int): [Artist] 1302 | } 1303 | 1304 | type HighestBid { 1305 | # A globally unique ID. 1306 | __id: ID! 1307 | 1308 | # A type-specific ID. 1309 | id: String! 1310 | created_at(format: String, timezone: String, convert_to_utc: Boolean): String 1311 | number: Int 1312 | is_cancelled: Boolean 1313 | 1314 | # A formatted price with various currency formatting options. 1315 | amount( 1316 | symbol: String 1317 | thousand: String = "," 1318 | decimal: String = "." 1319 | 1320 | # Allows control of symbol position (%v = value, %s = symbol) 1321 | format: String = "%s%v" 1322 | precision: Int = 0 1323 | ): String 1324 | cents: Int 1325 | display: String 1326 | amount_cents: Int @deprecated(reason: "Favor `cents`") 1327 | display_amount_dollars: String @deprecated(reason: "Favor `display`") 1328 | } 1329 | 1330 | union Highlighted = HighlightedShow | HighlightedArticle 1331 | 1332 | type HighlightedArticle implements Node { 1333 | # A globally unique ID. 1334 | __id: ID! 1335 | 1336 | # A type-specific ID. 1337 | id: String! 1338 | cached: Int 1339 | title: String 1340 | published_at(format: String, timezone: String, convert_to_utc: Boolean): String 1341 | updated_at(format: String, timezone: String, convert_to_utc: Boolean): String 1342 | thumbnail_title: String 1343 | thumbnail_teaser: String 1344 | author: Author 1345 | thumbnail_image: Image 1346 | slug: String 1347 | href: String 1348 | } 1349 | 1350 | type HighlightedShow implements Node { 1351 | # A globally unique ID. 1352 | __id: ID! 1353 | 1354 | # A type-specific ID. 1355 | id: String! 1356 | 1357 | # A type-specific Gravity Mongo Document ID. 1358 | _id: String! 1359 | cached: Int 1360 | href: String 1361 | kind: String 1362 | 1363 | # The exhibition title 1364 | name: String 1365 | description: String 1366 | type: String 1367 | displayable: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 1368 | 1369 | # Gravity doesn’t expose the `active` flag. Temporarily re-state its logic. 1370 | is_active: Boolean 1371 | is_displayable: Boolean 1372 | is_fair_booth: Boolean 1373 | press_release(format: Format): String 1374 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 1375 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 1376 | 1377 | # A formatted description of the start to end dates 1378 | exhibition_period: String 1379 | artists: [Artist] 1380 | partner: Partner 1381 | fair: Fair 1382 | location: Location 1383 | status: String 1384 | 1385 | # A formatted update on upcoming status changes 1386 | status_update( 1387 | # Before this many days no update will be generated 1388 | max_days: Int 1389 | ): String 1390 | events: [PartnerShowEventType] 1391 | counts: PartnerShowCounts 1392 | artworks( 1393 | # Number of artworks to return 1394 | size: Int = 25 1395 | published: Boolean = true 1396 | page: Int = 1 1397 | all: Boolean 1398 | for_sale: Boolean 1399 | 1400 | # List of artwork IDs to exclude from the response (irrespective of size) 1401 | exclude: [String] 1402 | ): [Artwork] 1403 | meta_image: Image 1404 | cover_image: Image 1405 | images( 1406 | # Number of images to return 1407 | size: Int 1408 | 1409 | # Pass true/false to include cover or not 1410 | default: Boolean 1411 | page: Int 1412 | ): [Image] 1413 | } 1414 | 1415 | type HomePage { 1416 | # Single artwork module to show on the home screen 1417 | artwork_module( 1418 | # Module key 1419 | key: String 1420 | 1421 | # ID of generic gene rail to target 1422 | id: String 1423 | 1424 | # ID of generic gene rail to target 1425 | generic_gene_id: String 1426 | 1427 | # ID of followed artist to target for related artist rails 1428 | followed_artist_id: String 1429 | 1430 | # ID of related artist to target for related artist rails 1431 | related_artist_id: String 1432 | ): HomePageArtworkModule 1433 | 1434 | # Artwork modules to show on the home screen 1435 | artwork_modules( 1436 | # Maximum number of modules to return, disable limit with a negative number 1437 | max_rails: Int = 8 1438 | 1439 | # Maximum number of followed genes to return, disable with a negative number 1440 | max_followed_gene_rails: Int = 1 1441 | 1442 | # The preferred order of modules, defaults to order returned by Gravity 1443 | order: [HomePageArtworkModuleTypes] 1444 | ): [HomePageArtworkModule] 1445 | 1446 | # Single artist module to show on the home screen. 1447 | artist_module( 1448 | # Module identifier. 1449 | key: HomePageArtistModuleTypes 1450 | ): HomePageArtistModule 1451 | 1452 | # Artist modules to show on the home screen 1453 | artist_modules: [HomePageArtistModule] 1454 | 1455 | # A list of enabled hero units to show on the requested platform 1456 | hero_units(platform: HomePageHeroUnitPlatform!): [HomePageHeroUnit] 1457 | } 1458 | 1459 | type HomePageArtistModule implements Node { 1460 | # A globally unique ID. 1461 | __id: ID! 1462 | 1463 | # Module identifier. 1464 | key: String 1465 | results: [Artist] 1466 | } 1467 | 1468 | enum HomePageArtistModuleTypes { 1469 | # Artists recommended for the specific user. 1470 | SUGGESTED 1471 | 1472 | # The trending artists. 1473 | TRENDING 1474 | 1475 | # The most searched for artists. 1476 | POPULAR 1477 | } 1478 | 1479 | type HomePageArtworkModule implements Node { 1480 | # A globally unique ID. 1481 | __id: ID! 1482 | key: String 1483 | display: String @deprecated(reason: "Favor `is_`-prefixed Booleans (*and* this should be a Boolean)") 1484 | is_displayable: Boolean 1485 | params: HomePageModulesParams 1486 | context: HomePageModuleContext 1487 | title: String 1488 | results: [Artwork] 1489 | } 1490 | 1491 | enum HomePageArtworkModuleTypes { 1492 | ACTIVE_BIDS 1493 | FOLLOWED_ARTISTS 1494 | FOLLOWED_GALLERIES 1495 | SAVED_WORKS 1496 | RECOMMENDED_WORKS 1497 | LIVE_AUCTIONS 1498 | CURRENT_FAIRS 1499 | FOLLOWED_ARTIST 1500 | RELATED_ARTISTS 1501 | FOLLOWED_GENES 1502 | GENERIC_GENES 1503 | } 1504 | 1505 | type HomePageHeroUnit { 1506 | # A globally unique ID. 1507 | __id: ID! 1508 | 1509 | # A type-specific ID. 1510 | id: String! 1511 | 1512 | # A type-specific Gravity Mongo Document ID. 1513 | _id: String! 1514 | cached: Int 1515 | heading: String 1516 | href: String 1517 | title: String 1518 | 1519 | # The image to show, on desktop this defaults to the wide version. 1520 | background_image_url(version: HomePageHeroUnitImageVersion): String 1521 | } 1522 | 1523 | enum HomePageHeroUnitImageVersion { 1524 | WIDE 1525 | NARROW 1526 | } 1527 | 1528 | enum HomePageHeroUnitPlatform { 1529 | MOBILE 1530 | DESKTOP 1531 | MARTSY 1532 | } 1533 | 1534 | union HomePageModuleContext = HomePageModuleContextFair | HomePageModuleContextSale | HomePageModuleContextGene | HomePageModuleContextTrending | HomePageModuleContextFollowArtists | HomePageModuleContextRelatedArtist | HomePageModuleContextFollowedArtist 1535 | 1536 | type HomePageModuleContextFair { 1537 | # A globally unique ID. 1538 | __id: ID! 1539 | 1540 | # A type-specific ID. 1541 | id: String! 1542 | 1543 | # A type-specific Gravity Mongo Document ID. 1544 | _id: String! 1545 | cached: Int 1546 | banner_size: String 1547 | profile: Profile 1548 | has_full_feature: Boolean 1549 | has_homepage_section: Boolean 1550 | has_listing: Boolean 1551 | has_large_banner: Boolean 1552 | href: String 1553 | image: Image 1554 | location: Location 1555 | 1556 | # Are we currently in the fair's active period? 1557 | is_active: Boolean 1558 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 1559 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 1560 | name: String 1561 | tagline: String 1562 | published: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 1563 | is_published: Boolean 1564 | organizer: organizer 1565 | } 1566 | 1567 | type HomePageModuleContextFollowArtists { 1568 | artists: [Artist] 1569 | counts: FollowArtistCounts 1570 | } 1571 | 1572 | type HomePageModuleContextFollowedArtist { 1573 | artist: Artist 1574 | } 1575 | 1576 | type HomePageModuleContextGene implements Node { 1577 | # A globally unique ID. 1578 | __id: ID! 1579 | 1580 | # A type-specific ID. 1581 | id: String! 1582 | 1583 | # A type-specific Gravity Mongo Document ID. 1584 | _id: String! 1585 | cached: Int 1586 | 1587 | # Artworks Elastic Search results 1588 | filtered_artworks( 1589 | aggregation_partner_cities: [String] 1590 | aggregations: [ArtworkAggregation] 1591 | artist_id: String 1592 | color: String 1593 | dimension_range: String 1594 | extra_aggregation_gene_ids: [String] 1595 | include_artworks_by_followed_artists: Boolean 1596 | for_sale: Boolean 1597 | gene_id: String 1598 | gene_ids: [String] 1599 | height: String 1600 | width: String 1601 | 1602 | # A string from the list of allocations, or * to denote all mediums 1603 | medium: String 1604 | period: String 1605 | periods: [String] 1606 | major_periods: [String] 1607 | partner_id: ID 1608 | partner_cities: [String] 1609 | price_range: String 1610 | page: Int 1611 | size: Int 1612 | sort: String 1613 | ): FilterArtworks 1614 | href: String 1615 | name: String 1616 | description: String 1617 | image: Image 1618 | artists: [Artist] 1619 | trending_artists(sample: Int): [Artist] 1620 | } 1621 | 1622 | type HomePageModuleContextRelatedArtist { 1623 | artist: Artist 1624 | based_on: Artist 1625 | } 1626 | 1627 | type HomePageModuleContextSale { 1628 | # A globally unique ID. 1629 | __id: ID! 1630 | 1631 | # A type-specific ID. 1632 | id: String! 1633 | 1634 | # A type-specific Gravity Mongo Document ID. 1635 | _id: String! 1636 | cached: Int 1637 | name: String 1638 | href: String 1639 | description: String 1640 | sale_type: String 1641 | is_auction: Boolean 1642 | is_auction_promo: Boolean 1643 | is_preview: Boolean 1644 | is_open: Boolean 1645 | is_live_open: Boolean 1646 | is_closed: Boolean 1647 | is_with_buyers_premium: Boolean 1648 | auction_state: String @deprecated(reason: "Favor `status` for consistency with other models") 1649 | status: String 1650 | registration_ends_at(format: String, timezone: String, convert_to_utc: Boolean): String 1651 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 1652 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 1653 | live_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 1654 | event_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 1655 | event_end_at(format: String, timezone: String, convert_to_utc: Boolean): String 1656 | currency: String 1657 | sale_artworks(page: Int = 1, size: Int = 25, all: Boolean = false): [SaleArtwork] 1658 | artworks( 1659 | page: Int = 1 1660 | size: Int = 25 1661 | all: Boolean = false 1662 | 1663 | # List of artwork IDs to exclude from the response (irrespective of size) 1664 | exclude: [String] 1665 | ): [Artwork] 1666 | cover_image: Image 1667 | sale_artwork(id: String!): SaleArtwork 1668 | profile: Profile 1669 | 1670 | # A bid increment policy that explains minimum bids in ranges. 1671 | bid_increments: [BidIncrement] 1672 | 1673 | # Auction's buyer's premium policy. 1674 | buyers_premium: [BuyersPremium] 1675 | } 1676 | 1677 | type HomePageModuleContextTrending { 1678 | artists: [Artist] 1679 | } 1680 | 1681 | type HomePageModulesParams { 1682 | gene_id: String 1683 | medium: String 1684 | price_range: String 1685 | id: ID 1686 | followed_artist_id: ID 1687 | related_artist_id: ID 1688 | } 1689 | 1690 | type Image { 1691 | # A type-specific ID. 1692 | id: String 1693 | href: String 1694 | title: String 1695 | width: Int 1696 | height: Int 1697 | orientation: String 1698 | aspect_ratio: Float 1699 | versions: [String] 1700 | caption: String 1701 | is_default: Boolean 1702 | position: Int 1703 | url(version: [String]): String 1704 | cropped(width: Int!, height: Int!, version: [String]): CroppedImageUrl 1705 | resized(width: Int, height: Int, version: [String]): ResizedImageUrl 1706 | deep_zoom: DeepZoom 1707 | is_zoomable: Boolean 1708 | 1709 | # Value to use when `padding-bottom` for fluid image placeholders 1710 | placeholder: String 1711 | } 1712 | 1713 | union Item = ArtistItem | FeaturedLinkItem | GeneItem 1714 | 1715 | type Location { 1716 | # A globally unique ID. 1717 | __id: ID! 1718 | 1719 | # A type-specific ID. 1720 | id: String! 1721 | cached: Int 1722 | city: String 1723 | country: String 1724 | coordinates: coordinates 1725 | display: String 1726 | address: String 1727 | address_2: String 1728 | postal_code: String 1729 | state: String 1730 | phone: String 1731 | day_schedules: [DaySchedule] 1732 | } 1733 | 1734 | type LotStanding { 1735 | bidder: Bidder 1736 | sale_artwork: SaleArtwork 1737 | 1738 | # You are winning and reserve is met 1739 | is_highest_bidder: Boolean 1740 | 1741 | # You are the leading bidder without regard to reserve 1742 | is_leading_bidder: Boolean 1743 | 1744 | # Your bid if it is currently winning 1745 | active_bid: BidderPosition 1746 | 1747 | # Your most recent bid—which is not necessarily winning (may be higher or lower) 1748 | most_recent_bid: BidderPosition 1749 | } 1750 | 1751 | type Me { 1752 | # A globally unique ID. 1753 | __id: ID! 1754 | 1755 | # A type-specific ID. 1756 | id: String! 1757 | type: String 1758 | created_at(format: String, timezone: String, convert_to_utc: Boolean): String 1759 | email: String 1760 | name: String 1761 | paddle_number: String 1762 | 1763 | # A list of the current user’s bidder registrations 1764 | bidders( 1765 | # The slug or ID of a Sale 1766 | sale_id: String 1767 | ): [Bidder] 1768 | 1769 | # The current user's status relating to bids on artworks 1770 | bidder_status(sale_id: String!, artwork_id: String!): LotStanding 1771 | 1772 | # A list of the current user's bidder positions 1773 | bidder_positions( 1774 | # Only the most recent bidder positions per artwork. 1775 | current: Boolean 1776 | 1777 | # Only the bidder positions on a specific artwork 1778 | artwork_id: String 1779 | 1780 | # Only the bidder positions for a specific auction 1781 | sale_id: String 1782 | ): [BidderPosition] 1783 | 1784 | # The current user's status relating to bids on artworks 1785 | lot_standing(sale_id: String!, artwork_id: String!): LotStanding 1786 | 1787 | # A list of the current user's auction standings for given lots 1788 | lot_standings( 1789 | # Only the lot standings for currently open or closed auctions. 1790 | live: Boolean 1791 | 1792 | # Only includes lots on which you have a leading bidder position. 1793 | active_positions: Boolean 1794 | 1795 | # Only the lot standings on a specific artwork 1796 | artwork_id: String 1797 | 1798 | # Only the lot standings for a specific auction 1799 | sale_id: String 1800 | ): [LotStanding] 1801 | sale_registrations( 1802 | size: Int 1803 | 1804 | # Limit by auction. 1805 | is_auction: Boolean = true 1806 | 1807 | # Limit by published status. 1808 | published: Boolean = true 1809 | 1810 | # Limit by live status. 1811 | live: Boolean = true 1812 | sort: SaleSorts 1813 | ): [SaleRegistration] 1814 | 1815 | # A list of the current user’s artist follows 1816 | follow_artists(size: Int, page: Int): FollowArtists 1817 | 1818 | # A list of the current user’s suggested artists, based on a single artist 1819 | suggested_artists( 1820 | # The slug or ID of an artist 1821 | artist_id: String 1822 | 1823 | # Exclude artists without for sale works 1824 | exclude_artists_without_forsale_artworks: Boolean 1825 | 1826 | # Exclude artists without any artworks 1827 | exclude_artists_without_artworks: Boolean 1828 | 1829 | # Exclude artists the user already follows 1830 | exclude_followed_artists: Boolean 1831 | 1832 | # Amount of artists to return 1833 | size: Int 1834 | 1835 | # Pagination, need I say more? 1836 | page: Int 1837 | ): [Artist] 1838 | } 1839 | 1840 | input Near { 1841 | lat: Float! 1842 | lng: Float! 1843 | max_distance: Float 1844 | } 1845 | 1846 | # An object with a Globally Unique ID 1847 | interface Node { 1848 | # The ID of the object. 1849 | __id: ID! 1850 | } 1851 | 1852 | type OrderedSet { 1853 | # A globally unique ID. 1854 | __id: ID! 1855 | 1856 | # A type-specific ID. 1857 | id: String! 1858 | cached: Int 1859 | key: String 1860 | name: String 1861 | description: String 1862 | item_type: String 1863 | items: [Item] 1864 | } 1865 | 1866 | type organizer { 1867 | profile_id: ID 1868 | } 1869 | 1870 | type Partner implements Node { 1871 | # A globally unique ID. 1872 | __id: ID! 1873 | 1874 | # A type-specific ID. 1875 | id: String! 1876 | 1877 | # A type-specific Gravity Mongo Document ID. 1878 | _id: String! 1879 | cached: Int 1880 | name: String 1881 | collecting_institution: String 1882 | is_default_profile_public: Boolean 1883 | has_fair_partnership: Boolean 1884 | type: String 1885 | href: String 1886 | is_linkable: Boolean 1887 | is_pre_qualify: Boolean 1888 | initials(length: Int = 3): String 1889 | default_profile_id: String 1890 | profile: Profile 1891 | shows(size: Int, sort: PartnerShowSorts, status: EventStatus, fair_id: String, near: Near, displayable: Boolean = true, featured: Boolean, at_a_fair: Boolean): [PartnerShow] 1892 | artworks(size: Int, for_sale: Boolean, sort: ArtworkSorts, exclude: [String]): [Artwork] 1893 | locations(size: Int = 25): [Location] 1894 | contact_message: String 1895 | counts: PartnerCounts 1896 | } 1897 | 1898 | type PartnerArtist { 1899 | # A globally unique ID. 1900 | __id: ID! 1901 | 1902 | # A type-specific ID. 1903 | id: String! 1904 | counts: PartnerArtistCounts 1905 | is_display_on_partner_profile: Boolean 1906 | is_represented_by: Boolean 1907 | sortable_id: String 1908 | is_use_default_biography: Boolean 1909 | biography: String 1910 | partner: Partner 1911 | artist: Artist 1912 | } 1913 | 1914 | type PartnerArtistCounts { 1915 | artworks( 1916 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 1917 | format: String 1918 | label: String 1919 | ): FormattedNumber 1920 | for_sale_artworks( 1921 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 1922 | format: String 1923 | label: String 1924 | ): FormattedNumber 1925 | } 1926 | 1927 | type PartnerCategory { 1928 | # A globally unique ID. 1929 | __id: ID! 1930 | 1931 | # A type-specific ID. 1932 | id: String! 1933 | cached: Int 1934 | name: String 1935 | category_type: CategoryType 1936 | partners( 1937 | size: Int 1938 | page: Int 1939 | 1940 | # Coordinates to find partners closest to 1941 | near: String 1942 | 1943 | # Indicates tier 1/2 for gallery, 1 for institution 1944 | eligible_for_primary_bucket: Boolean 1945 | 1946 | # Indicates tier 3/4 for gallery, 2 for institution 1947 | eligible_for_secondary_bucket: Boolean 1948 | 1949 | # Indicates an active subscription 1950 | eligible_for_listing: Boolean 1951 | eligible_for_carousel: Boolean 1952 | has_full_profile: Boolean 1953 | default_profile_public: Boolean 1954 | sort: PartnersSortType 1955 | 1956 | # 1957 | # Only return partners of the specified partner categories. 1958 | # Accepts list of slugs. 1959 | # 1960 | partner_categories: [String] 1961 | type: [PartnerClassification] 1962 | 1963 | # term used for searching Partners 1964 | term: String 1965 | ): [Partner] 1966 | } 1967 | 1968 | enum PartnerClassification { 1969 | AUCTION 1970 | DEMO 1971 | GALLERY 1972 | PRIVATE_COLLECTOR 1973 | PRIVATE_DEALER 1974 | INSTITUTION 1975 | INSTITUTIONAL_SELLER 1976 | BRAND 1977 | } 1978 | 1979 | type PartnerCounts { 1980 | artworks( 1981 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 1982 | format: String 1983 | label: String 1984 | ): FormattedNumber 1985 | artists( 1986 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 1987 | format: String 1988 | label: String 1989 | ): FormattedNumber 1990 | partner_artists( 1991 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 1992 | format: String 1993 | label: String 1994 | ): FormattedNumber 1995 | eligible_artworks( 1996 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 1997 | format: String 1998 | label: String 1999 | ): FormattedNumber 2000 | published_for_sale_artworks( 2001 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2002 | format: String 2003 | label: String 2004 | ): FormattedNumber 2005 | published_not_for_sale_artworks( 2006 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2007 | format: String 2008 | label: String 2009 | ): FormattedNumber 2010 | shows( 2011 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2012 | format: String 2013 | label: String 2014 | ): FormattedNumber 2015 | displayable_shows( 2016 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2017 | format: String 2018 | label: String 2019 | ): FormattedNumber 2020 | current_displayable_shows( 2021 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2022 | format: String 2023 | label: String 2024 | ): FormattedNumber 2025 | artist_documents( 2026 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2027 | format: String 2028 | label: String 2029 | ): FormattedNumber 2030 | partner_show_documents( 2031 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2032 | format: String 2033 | label: String 2034 | ): FormattedNumber 2035 | } 2036 | 2037 | enum PartnersAggregation { 2038 | LOCATION 2039 | CATEGORY 2040 | TOTAL 2041 | } 2042 | 2043 | # The results for one of the requested aggregations 2044 | type PartnersAggregationResults { 2045 | slice: PartnersAggregation 2046 | counts: [AggregationCount] 2047 | } 2048 | 2049 | type PartnerShow implements Node { 2050 | # A globally unique ID. 2051 | __id: ID! 2052 | 2053 | # A type-specific ID. 2054 | id: String! 2055 | 2056 | # A type-specific Gravity Mongo Document ID. 2057 | _id: String! 2058 | cached: Int 2059 | href: String 2060 | kind: String 2061 | 2062 | # The exhibition title 2063 | name: String 2064 | description: String 2065 | type: String 2066 | displayable: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 2067 | 2068 | # Gravity doesn’t expose the `active` flag. Temporarily re-state its logic. 2069 | is_active: Boolean 2070 | is_displayable: Boolean 2071 | is_fair_booth: Boolean 2072 | press_release(format: Format): String 2073 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2074 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 2075 | 2076 | # A formatted description of the start to end dates 2077 | exhibition_period: String 2078 | artists: [Artist] 2079 | partner: Partner 2080 | fair: Fair 2081 | location: Location 2082 | status: String 2083 | 2084 | # A formatted update on upcoming status changes 2085 | status_update( 2086 | # Before this many days no update will be generated 2087 | max_days: Int 2088 | ): String 2089 | events: [PartnerShowEventType] 2090 | counts: PartnerShowCounts 2091 | artworks( 2092 | # Number of artworks to return 2093 | size: Int = 25 2094 | published: Boolean = true 2095 | page: Int = 1 2096 | all: Boolean 2097 | for_sale: Boolean 2098 | 2099 | # List of artwork IDs to exclude from the response (irrespective of size) 2100 | exclude: [String] 2101 | ): [Artwork] 2102 | meta_image: Image 2103 | cover_image: Image 2104 | images( 2105 | # Number of images to return 2106 | size: Int 2107 | 2108 | # Pass true/false to include cover or not 2109 | default: Boolean 2110 | page: Int 2111 | ): [Image] 2112 | } 2113 | 2114 | type PartnerShowCounts { 2115 | artworks( 2116 | # The slug or ID of an artist in the show. 2117 | artist_id: String 2118 | ): Int 2119 | eligible_artworks( 2120 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2121 | format: String 2122 | label: String 2123 | ): FormattedNumber 2124 | } 2125 | 2126 | type PartnerShowEventType { 2127 | title: String 2128 | description: String 2129 | event_type: String 2130 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2131 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 2132 | } 2133 | 2134 | type PartnerShowSearchEntity implements Node { 2135 | # A globally unique ID. 2136 | __id: ID! 2137 | 2138 | # A type-specific ID. 2139 | id: String! 2140 | 2141 | # A type-specific Gravity Mongo Document ID. 2142 | _id: String! 2143 | cached: Int 2144 | href: String 2145 | kind: String 2146 | 2147 | # The exhibition title 2148 | name: String 2149 | description: String 2150 | type: String 2151 | displayable: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 2152 | 2153 | # Gravity doesn’t expose the `active` flag. Temporarily re-state its logic. 2154 | is_active: Boolean 2155 | is_displayable: Boolean 2156 | is_fair_booth: Boolean 2157 | press_release(format: Format): String 2158 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2159 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 2160 | 2161 | # A formatted description of the start to end dates 2162 | exhibition_period: String 2163 | artists: [Artist] 2164 | partner: Partner 2165 | fair: Fair 2166 | location: Location 2167 | status: String 2168 | 2169 | # A formatted update on upcoming status changes 2170 | status_update( 2171 | # Before this many days no update will be generated 2172 | max_days: Int 2173 | ): String 2174 | events: [PartnerShowEventType] 2175 | counts: PartnerShowCounts 2176 | artworks( 2177 | # Number of artworks to return 2178 | size: Int = 25 2179 | published: Boolean = true 2180 | page: Int = 1 2181 | all: Boolean 2182 | for_sale: Boolean 2183 | 2184 | # List of artwork IDs to exclude from the response (irrespective of size) 2185 | exclude: [String] 2186 | ): [Artwork] 2187 | meta_image: Image 2188 | cover_image: Image 2189 | images( 2190 | # Number of images to return 2191 | size: Int 2192 | 2193 | # Pass true/false to include cover or not 2194 | default: Boolean 2195 | page: Int 2196 | ): [Image] 2197 | } 2198 | 2199 | enum PartnerShowSorts { 2200 | created_at_asc 2201 | created_at_desc 2202 | end_at_asc 2203 | end_at_desc 2204 | start_at_asc 2205 | start_at_desc 2206 | name_asc 2207 | name_desc 2208 | publish_at_asc 2209 | publish_at_desc 2210 | } 2211 | 2212 | enum PartnersSortType { 2213 | CREATED_AT_ASC 2214 | CREATED_AT_DESC 2215 | SORTABLE_ID_ASC 2216 | SORTABLE_ID_DESC 2217 | RELATIVE_SIZE_ASC 2218 | RELATIVE_SIZE_DESC 2219 | PUBLISHED_AT_DESC 2220 | RANDOM_SCORE_DESC 2221 | } 2222 | 2223 | union PartnerTypes = Partner | ExternalPartner 2224 | 2225 | type Profile { 2226 | # A globally unique ID. 2227 | __id: ID! 2228 | 2229 | # A type-specific ID. 2230 | id: String! 2231 | 2232 | # A type-specific Gravity Mongo Document ID. 2233 | _id: String! 2234 | cached: Int 2235 | name: String 2236 | image: Image 2237 | initials(length: Int = 3): String 2238 | icon: Image 2239 | href: String 2240 | is_published: Boolean 2241 | bio: String 2242 | counts: ProfileCounts 2243 | } 2244 | 2245 | type ProfileCounts { 2246 | follows( 2247 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2248 | format: String 2249 | label: String 2250 | ): FormattedNumber 2251 | } 2252 | 2253 | type ProfileSearchEntity { 2254 | # A globally unique ID. 2255 | __id: ID! 2256 | 2257 | # A type-specific ID. 2258 | id: String! 2259 | 2260 | # A type-specific Gravity Mongo Document ID. 2261 | _id: String! 2262 | cached: Int 2263 | name: String 2264 | image: Image 2265 | initials(length: Int = 3): String 2266 | icon: Image 2267 | href: String 2268 | is_published: Boolean 2269 | bio: String 2270 | counts: ProfileCounts 2271 | } 2272 | 2273 | type ResizedImageUrl { 2274 | factor: Float 2275 | width: Int 2276 | height: Int 2277 | url: String 2278 | } 2279 | 2280 | enum Role { 2281 | PARTICIPANT 2282 | OPERATOR 2283 | } 2284 | 2285 | type RootQueryType { 2286 | # Fetches an object given its Globally Unique ID 2287 | node( 2288 | # The ID of the object 2289 | __id: ID! 2290 | ): Node 2291 | status: Status 2292 | 2293 | # An Article 2294 | article( 2295 | # The ID of the Article 2296 | id: String! 2297 | ): Article 2298 | 2299 | # A list of Articles 2300 | articles(show_id: String, sort: ArticleSorts, published: Boolean = true): [Article] 2301 | 2302 | # An Artwork 2303 | artwork( 2304 | # The slug or ID of the Artwork 2305 | id: String! 2306 | ): Artwork 2307 | 2308 | # A list of Artworks 2309 | artworks(ids: [String]): [Artwork] 2310 | 2311 | # An Artist 2312 | artist( 2313 | # The slug or ID of the Artist 2314 | id: String! 2315 | ): Artist 2316 | 2317 | # A list of Artists 2318 | artists(size: Int, sort: ArtistSorts): [Artist] 2319 | 2320 | # An External Partner not on the platform 2321 | external_partner( 2322 | # The ID of the Partner 2323 | id: String! 2324 | ): ExternalPartner 2325 | 2326 | # A Fair 2327 | fair( 2328 | # The slug or ID of the Fair 2329 | id: String! 2330 | ): Fair 2331 | 2332 | # A list of Fairs 2333 | fairs(size: Int, page: Int, sort: FairSorts, status: EventStatus, fair_organizer_id: String, near: Near, has_full_feature: Boolean, has_homepage_section: Boolean, has_listing: Boolean): [Fair] 2334 | gene( 2335 | # The slug or ID of the Gene 2336 | id: String! 2337 | ): Gene 2338 | 2339 | # Home screen content 2340 | home_page: HomePage 2341 | 2342 | # A Profile 2343 | profile( 2344 | # The slug or ID of the Profile 2345 | id: String! 2346 | ): Profile 2347 | 2348 | # A collection of OrderedSets 2349 | ordered_sets( 2350 | # Key to the OrderedSet or group of OrderedSets 2351 | key: String! 2352 | public: Boolean = true 2353 | ): [OrderedSet] 2354 | 2355 | # A Partner 2356 | partner( 2357 | # The slug or ID of the Partner 2358 | id: String! 2359 | ): Partner 2360 | 2361 | # A list of Partners 2362 | partners( 2363 | size: Int 2364 | page: Int 2365 | 2366 | # Coordinates to find partners closest to 2367 | near: String 2368 | 2369 | # Indicates tier 1/2 for gallery, 1 for institution 2370 | eligible_for_primary_bucket: Boolean 2371 | 2372 | # Indicates tier 3/4 for gallery, 2 for institution 2373 | eligible_for_secondary_bucket: Boolean 2374 | 2375 | # Indicates an active subscription 2376 | eligible_for_listing: Boolean 2377 | eligible_for_carousel: Boolean 2378 | has_full_profile: Boolean 2379 | default_profile_public: Boolean 2380 | sort: PartnersSortType 2381 | 2382 | # 2383 | # Only return partners of the specified partner categories. 2384 | # Accepts list of slugs. 2385 | # 2386 | partner_categories: [String] 2387 | type: [PartnerClassification] 2388 | 2389 | # term used for searching Partners 2390 | term: String 2391 | ): [Partner] 2392 | 2393 | # Partners Elastic Search results 2394 | filter_partners( 2395 | size: Int 2396 | page: Int 2397 | 2398 | # Coordinates to find partners closest to 2399 | near: String 2400 | 2401 | # Indicates tier 1/2 for gallery, 1 for institution 2402 | eligible_for_primary_bucket: Boolean 2403 | 2404 | # Indicates tier 3/4 for gallery, 2 for institution 2405 | eligible_for_secondary_bucket: Boolean 2406 | 2407 | # Indicates an active subscription 2408 | eligible_for_listing: Boolean 2409 | eligible_for_carousel: Boolean 2410 | has_full_profile: Boolean 2411 | default_profile_public: Boolean 2412 | sort: PartnersSortType 2413 | 2414 | # 2415 | # Only return partners of the specified partner categories. 2416 | # Accepts list of slugs. 2417 | # 2418 | partner_categories: [String] 2419 | type: [PartnerClassification] 2420 | 2421 | # term used for searching Partners 2422 | term: String 2423 | aggregations: [PartnersAggregation]! 2424 | ): FilterPartners 2425 | 2426 | # Artworks Elastic Search results 2427 | filter_artworks( 2428 | aggregation_partner_cities: [String] 2429 | aggregations: [ArtworkAggregation] 2430 | artist_id: String 2431 | color: String 2432 | dimension_range: String 2433 | extra_aggregation_gene_ids: [String] 2434 | include_artworks_by_followed_artists: Boolean 2435 | for_sale: Boolean 2436 | gene_id: String 2437 | gene_ids: [String] 2438 | height: String 2439 | width: String 2440 | 2441 | # A string from the list of allocations, or * to denote all mediums 2442 | medium: String 2443 | period: String 2444 | periods: [String] 2445 | major_periods: [String] 2446 | partner_id: ID 2447 | partner_cities: [String] 2448 | price_range: String 2449 | page: Int 2450 | size: Int 2451 | sort: String 2452 | ): FilterArtworks 2453 | 2454 | # A PartnerCategory 2455 | partner_category( 2456 | # The slug or ID of the PartnerCategory 2457 | id: String! 2458 | ): PartnerCategory 2459 | 2460 | # A list of PartnerCategories 2461 | partner_categories( 2462 | size: Int 2463 | category_type: CategoryType 2464 | 2465 | # Filter by whether category is internal 2466 | internal: Boolean = false 2467 | ): [PartnerCategory] 2468 | 2469 | # A Partner Show 2470 | partner_show( 2471 | # The slug or ID of the PartnerShow 2472 | id: String! 2473 | ): PartnerShow 2474 | 2475 | # A list of PartnerShows 2476 | partner_shows(size: Int, sort: PartnerShowSorts, status: EventStatus, fair_id: String, partner_id: String, near: Near, displayable: Boolean = true, featured: Boolean, at_a_fair: Boolean): [PartnerShow] 2477 | 2478 | # A Sale 2479 | sale( 2480 | # The slug or ID of the Sale 2481 | id: String! 2482 | ): Sale 2483 | 2484 | # A list of Sales 2485 | sales( 2486 | size: Int 2487 | 2488 | # Limit by auction. 2489 | is_auction: Boolean = true 2490 | 2491 | # Limit by published status. 2492 | published: Boolean = true 2493 | 2494 | # Limit by live status. 2495 | live: Boolean = true 2496 | sort: SaleSorts 2497 | ): [Sale] 2498 | 2499 | # A Sale Artwork 2500 | sale_artwork( 2501 | # The slug or ID of the SaleArtwork 2502 | id: String! 2503 | ): SaleArtwork 2504 | 2505 | # A Search 2506 | search( 2507 | # Your search term 2508 | term: String! 2509 | ): Search 2510 | 2511 | # A Show 2512 | show( 2513 | # The slug or ID of the Show 2514 | id: String! 2515 | ): Show 2516 | 2517 | # Trending artists 2518 | trending_artists( 2519 | # Trending method 2520 | method: String = "fetch" 2521 | 2522 | # Trending metric name 2523 | name: TrendingMetrics! 2524 | 2525 | # Number of results to return 2526 | size: Int = 40 2527 | 2528 | # Fetch the top artists for each metric within double the base time period 2529 | double_time_period: Boolean = false 2530 | ): TrendingArtists 2531 | me: Me 2532 | 2533 | # Creates, and authorizes, a JWT custom for Causality 2534 | causality_jwt( 2535 | # The id of the auction to participate in 2536 | sale_id: String! 2537 | role: Role 2538 | ): String 2539 | } 2540 | 2541 | type Sale { 2542 | # A globally unique ID. 2543 | __id: ID! 2544 | 2545 | # A type-specific ID. 2546 | id: String! 2547 | 2548 | # A type-specific Gravity Mongo Document ID. 2549 | _id: String! 2550 | cached: Int 2551 | name: String 2552 | href: String 2553 | description: String 2554 | sale_type: String 2555 | is_auction: Boolean 2556 | is_auction_promo: Boolean 2557 | is_preview: Boolean 2558 | is_open: Boolean 2559 | is_live_open: Boolean 2560 | is_closed: Boolean 2561 | is_with_buyers_premium: Boolean 2562 | auction_state: String @deprecated(reason: "Favor `status` for consistency with other models") 2563 | status: String 2564 | registration_ends_at(format: String, timezone: String, convert_to_utc: Boolean): String 2565 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2566 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 2567 | live_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2568 | event_start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2569 | event_end_at(format: String, timezone: String, convert_to_utc: Boolean): String 2570 | currency: String 2571 | sale_artworks(page: Int = 1, size: Int = 25, all: Boolean = false): [SaleArtwork] 2572 | artworks( 2573 | page: Int = 1 2574 | size: Int = 25 2575 | all: Boolean = false 2576 | 2577 | # List of artwork IDs to exclude from the response (irrespective of size) 2578 | exclude: [String] 2579 | ): [Artwork] 2580 | cover_image: Image 2581 | sale_artwork(id: String!): SaleArtwork 2582 | profile: Profile 2583 | 2584 | # A bid increment policy that explains minimum bids in ranges. 2585 | bid_increments: [BidIncrement] 2586 | 2587 | # Auction's buyer's premium policy. 2588 | buyers_premium: [BuyersPremium] 2589 | } 2590 | 2591 | type SaleArtwork { 2592 | # A globally unique ID. 2593 | __id: ID! 2594 | 2595 | # A type-specific ID. 2596 | id: String! 2597 | 2598 | # A type-specific Gravity Mongo Document ID. 2599 | _id: String! 2600 | cached: Int 2601 | sale_id: String 2602 | sale: Sale 2603 | position: Int 2604 | lot_number: String 2605 | 2606 | # Currency abbreviation (e.g. "USD") 2607 | currency: String 2608 | 2609 | # Currency symbol (e.g. "$") 2610 | symbol: String 2611 | reserve_status: String 2612 | is_with_reserve: Boolean 2613 | is_bid_on: Boolean 2614 | 2615 | # Can bids be placed on the artwork? 2616 | is_biddable: Boolean 2617 | reserve_message: String 2618 | reserve: SaleArtworkReserve 2619 | low_estimate: SaleArtworkLowEstimate 2620 | high_estimate: SaleArtworkHighEstimate 2621 | opening_bid: SaleArtworkOpeningBid 2622 | minimum_next_bid: SaleArtworkMinimumNextBid 2623 | current_bid: SaleArtworkCurrentBid 2624 | highest_bid: SaleArtworkHighestBid 2625 | artwork: Artwork 2626 | estimate: String 2627 | counts: SaleArtworkCounts 2628 | low_estimate_cents: Int @deprecated(reason: "Favor `low_estimate`") 2629 | high_estimate_cents: Int @deprecated(reason: "Favor `high_estimate") 2630 | opening_bid_cents: Int @deprecated(reason: "Favor `opening_bid`") 2631 | minimum_next_bid_cents: Int @deprecated(reason: "Favor `minimum_next_bid`") 2632 | bidder_positions_count: Int @deprecated(reason: "Favor `counts.bidder_positions`") 2633 | bid_increments: [Int] 2634 | } 2635 | 2636 | type SaleArtworkCounts { 2637 | bidder_positions( 2638 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2639 | format: String 2640 | label: String 2641 | ): FormattedNumber 2642 | } 2643 | 2644 | type SaleArtworkCurrentBid { 2645 | # An amount of money expressed in cents. 2646 | cents: Float 2647 | 2648 | # A pre-formatted price. 2649 | display: String 2650 | 2651 | # A formatted price with various currency formatting options. 2652 | amount( 2653 | symbol: String 2654 | thousand: String = "," 2655 | decimal: String = "." 2656 | 2657 | # Allows control of symbol position (%v = value, %s = symbol) 2658 | format: String = "%s%v" 2659 | precision: Int = 0 2660 | ): String 2661 | } 2662 | 2663 | type SaleArtworkHighestBid { 2664 | id: ID 2665 | created_at(format: String, timezone: String, convert_to_utc: Boolean): String 2666 | is_cancelled: Boolean 2667 | 2668 | # A formatted price with various currency formatting options. 2669 | amount( 2670 | symbol: String 2671 | thousand: String = "," 2672 | decimal: String = "." 2673 | 2674 | # Allows control of symbol position (%v = value, %s = symbol) 2675 | format: String = "%s%v" 2676 | precision: Int = 0 2677 | ): String 2678 | cents: Int 2679 | display: String 2680 | amount_cents: Int @deprecated(reason: "Favor `cents`") 2681 | } 2682 | 2683 | type SaleArtworkHighEstimate { 2684 | # An amount of money expressed in cents. 2685 | cents: Float 2686 | 2687 | # A pre-formatted price. 2688 | display: String 2689 | 2690 | # A formatted price with various currency formatting options. 2691 | amount( 2692 | symbol: String 2693 | thousand: String = "," 2694 | decimal: String = "." 2695 | 2696 | # Allows control of symbol position (%v = value, %s = symbol) 2697 | format: String = "%s%v" 2698 | precision: Int = 0 2699 | ): String 2700 | } 2701 | 2702 | type SaleArtworkLowEstimate { 2703 | # An amount of money expressed in cents. 2704 | cents: Float 2705 | 2706 | # A pre-formatted price. 2707 | display: String 2708 | 2709 | # A formatted price with various currency formatting options. 2710 | amount( 2711 | symbol: String 2712 | thousand: String = "," 2713 | decimal: String = "." 2714 | 2715 | # Allows control of symbol position (%v = value, %s = symbol) 2716 | format: String = "%s%v" 2717 | precision: Int = 0 2718 | ): String 2719 | } 2720 | 2721 | type SaleArtworkMinimumNextBid { 2722 | # An amount of money expressed in cents. 2723 | cents: Float 2724 | 2725 | # A pre-formatted price. 2726 | display: String 2727 | 2728 | # A formatted price with various currency formatting options. 2729 | amount( 2730 | symbol: String 2731 | thousand: String = "," 2732 | decimal: String = "." 2733 | 2734 | # Allows control of symbol position (%v = value, %s = symbol) 2735 | format: String = "%s%v" 2736 | precision: Int = 0 2737 | ): String 2738 | } 2739 | 2740 | type SaleArtworkOpeningBid { 2741 | # An amount of money expressed in cents. 2742 | cents: Float 2743 | 2744 | # A pre-formatted price. 2745 | display: String 2746 | 2747 | # A formatted price with various currency formatting options. 2748 | amount( 2749 | symbol: String 2750 | thousand: String = "," 2751 | decimal: String = "." 2752 | 2753 | # Allows control of symbol position (%v = value, %s = symbol) 2754 | format: String = "%s%v" 2755 | precision: Int = 0 2756 | ): String 2757 | } 2758 | 2759 | type SaleArtworkReserve { 2760 | # An amount of money expressed in cents. 2761 | cents: Float 2762 | 2763 | # A pre-formatted price. 2764 | display: String 2765 | 2766 | # A formatted price with various currency formatting options. 2767 | amount( 2768 | symbol: String 2769 | thousand: String = "," 2770 | decimal: String = "." 2771 | 2772 | # Allows control of symbol position (%v = value, %s = symbol) 2773 | format: String = "%s%v" 2774 | precision: Int = 0 2775 | ): String 2776 | } 2777 | 2778 | type SaleRegistration { 2779 | is_registered: Boolean 2780 | bidder: Bidder 2781 | sale: Sale 2782 | } 2783 | 2784 | enum SaleSorts { 2785 | _ID_ASC 2786 | _ID_DESC 2787 | NAME_ASC 2788 | NAME_DESC 2789 | CREATED_AT_ASC 2790 | CREATED_AT_DESC 2791 | END_AT_ASC 2792 | END_AT_DESC 2793 | START_AT_ASC 2794 | START_AT_DESC 2795 | ELIGIBLE_SALE_ARTWORKS_COUNT_ASC 2796 | ELIGIBLE_SALE_ARTWORKS_COUNT_DESC 2797 | TIMELY_AT_NAME_ASC 2798 | TIMELY_AT_NAME_DESC 2799 | } 2800 | 2801 | type Search { 2802 | cached: Int 2803 | total: Int 2804 | results: [SearchResult] 2805 | } 2806 | 2807 | union SearchEntity = ArtistSearchEntity | ArtworkSearchEntity | ProfileSearchEntity | PartnerShowSearchEntity 2808 | 2809 | type SearchResult { 2810 | id: ID 2811 | title: String 2812 | href: String 2813 | snippet: String 2814 | image: Image 2815 | type: String 2816 | entity: SearchEntity 2817 | } 2818 | 2819 | type Show implements Node { 2820 | # A globally unique ID. 2821 | __id: ID! 2822 | 2823 | # A type-specific ID. 2824 | id: String! 2825 | 2826 | # A type-specific Gravity Mongo Document ID. 2827 | _id: String! 2828 | cached: Int 2829 | href: String 2830 | kind: String 2831 | 2832 | # The exhibition title 2833 | name: String 2834 | description: String 2835 | type: String 2836 | displayable: Boolean @deprecated(reason: "Prefix Boolean returning fields with `is_`") 2837 | 2838 | # Gravity doesn’t expose the `active` flag. Temporarily re-state its logic. 2839 | is_active: Boolean 2840 | is_displayable: Boolean 2841 | is_fair_booth: Boolean 2842 | is_reference: Boolean 2843 | press_release(format: Format): String 2844 | start_at(format: String, timezone: String, convert_to_utc: Boolean): String 2845 | end_at(format: String, timezone: String, convert_to_utc: Boolean): String 2846 | 2847 | # A formatted description of the start to end dates 2848 | exhibition_period: String 2849 | artists: [Artist] 2850 | artists_without_artworks: [Artist] 2851 | partner: PartnerTypes 2852 | fair: Fair 2853 | location: Location 2854 | city: String 2855 | status: String 2856 | 2857 | # A formatted update on upcoming status changes 2858 | status_update( 2859 | # Before this many days no update will be generated 2860 | max_days: Int 2861 | ): String 2862 | events: [PartnerShowEventType] 2863 | counts: ShowCounts 2864 | artworks( 2865 | # Number of artworks to return 2866 | size: Int = 25 2867 | published: Boolean = true 2868 | page: Int = 1 2869 | all: Boolean 2870 | for_sale: Boolean 2871 | 2872 | # List of artwork IDs to exclude from the response (irrespective of size) 2873 | exclude: [String] 2874 | ): [Artwork] 2875 | meta_image: Image 2876 | cover_image: Image 2877 | images( 2878 | # Number of images to return 2879 | size: Int 2880 | 2881 | # Pass true/false to include cover or not 2882 | default: Boolean 2883 | page: Int 2884 | ): [Image] 2885 | } 2886 | 2887 | type ShowCounts { 2888 | artworks( 2889 | # The slug or ID of an artist in the show. 2890 | artist_id: String 2891 | ): Int 2892 | eligible_artworks( 2893 | # Returns a `String` when format is specified. e.g.`"0,0.0000"` 2894 | format: String 2895 | label: String 2896 | ): FormattedNumber 2897 | } 2898 | 2899 | type Status { 2900 | gravity: StatusGravity 2901 | 2902 | # Metaphysics ping 2903 | ping: Boolean 2904 | } 2905 | 2906 | # Gravity ping 2907 | type StatusGravity { 2908 | ping: Boolean 2909 | } 2910 | 2911 | type TrendingArtists { 2912 | artists: [Artist] 2913 | } 2914 | 2915 | enum TrendingMetrics { 2916 | # Base time period: 2 weeks 2917 | ARTIST_FOLLOW 2918 | 2919 | # Base time period: 1 month 2920 | ARTIST_INQUIRY 2921 | 2922 | # Base time period: 2 weeks 2923 | ARTIST_SEARCH 2924 | 2925 | # Base time period: 1 month 2926 | ARTIST_SAVE 2927 | 2928 | # Number of artworks in fairs. Base time period: 12 weeks. 2929 | ARTIST_FAIR 2930 | 2931 | # Cumulative price achieved at auction. Base time period: 12 weeks 2932 | ARTIST_AUCTION_LOT 2933 | } 2934 | --------------------------------------------------------------------------------