├── .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 |
--------------------------------------------------------------------------------