Compare commits
11 Commits
ivan/add-w
...
1cc0660a93
Author | SHA1 | Date | |
---|---|---|---|
1cc0660a93 | |||
14da2ae388 | |||
9ee4d43c89 | |||
fcac551806 | |||
044d8fa46d | |||
33f5404820 | |||
04a30e67d3 | |||
08183ed952 | |||
4fac231c43 | |||
30e356e3e0 | |||
36712557cb |
@@ -13,5 +13,5 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: graphql-codegen causes no changes
|
||||
- name: codegen causes no changes
|
||||
run: ./bin/assert-no-changes-wrapper.sh
|
||||
|
@@ -4,6 +4,12 @@ git ls-files | xargs md5sum > before.txt
|
||||
yarn install
|
||||
yarn graphql-codegen
|
||||
prettier ./src --write
|
||||
for proto in $(find ./rbproto -iname '*.proto'); do
|
||||
name=$(basename "$proto" .proto)
|
||||
protoc -I=./rbproto --python_out=./rbproto/python --pyi_out=./rbproto/python ./rbproto/shot.proto
|
||||
yarn pbjs ./rbproto/shot.proto --ts ./rbproto/ts/shot.ts
|
||||
done
|
||||
prettier ./rbproto --write
|
||||
|
||||
git ls-files | xargs md5sum > after.txt
|
||||
|
||||
|
@@ -21,7 +21,7 @@
|
||||
in
|
||||
with pkgs; {
|
||||
devShell = mkShell {
|
||||
buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just];
|
||||
buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just protobuf];
|
||||
};
|
||||
});
|
||||
}
|
||||
|
25
justfile
25
justfile
@@ -1,4 +1,5 @@
|
||||
NIX := "LD_LIBRARY_PATH='' nix"
|
||||
PROTOBUF_DIR := "$PWD/rbproto"
|
||||
|
||||
prettier-gql:
|
||||
#!/usr/bin/env bash
|
||||
@@ -12,3 +13,27 @@ gql-codegen:
|
||||
|
||||
|
||||
gql: gql-codegen prettier-gql
|
||||
|
||||
protobuf-compile-a-python name:
|
||||
protoc -I={{ PROTOBUF_DIR }} --python_out={{ PROTOBUF_DIR }}/python --pyi_out={{ PROTOBUF_DIR }}/python {{ PROTOBUF_DIR }}/shot.proto
|
||||
|
||||
protobuf-compile-a-js name:
|
||||
#!/usr/bin/env bash
|
||||
set -euxo pipefail
|
||||
{{NIX}} develop --impure --command bash -c 'yarn pbjs {{ PROTOBUF_DIR }}/shot.proto --ts {{ PROTOBUF_DIR }}/ts/shot.ts && yarn prettier ./rbproto --write'
|
||||
|
||||
protobuf-compile-all-js:
|
||||
#!/usr/bin/env bash
|
||||
for proto in $(find {{ PROTOBUF_DIR }} -iname '*.proto'); do
|
||||
name=$(basename "$proto" .proto)
|
||||
just protobuf-compile-a-js $name
|
||||
done
|
||||
|
||||
protobuf-compile-all-python:
|
||||
#!/usr/bin/env bash
|
||||
for proto in $(find {{ PROTOBUF_DIR }} -iname '*.proto'); do
|
||||
name=$(basename "$proto" .proto)
|
||||
just protobuf-compile-a-python $name
|
||||
done
|
||||
|
||||
protobuf-compile-everything: protobuf-compile-all-js protobuf-compile-all-python
|
@@ -18,6 +18,7 @@
|
||||
"@graphql-codegen/typescript-operations": "^4.0.1",
|
||||
"@graphql-codegen/typescript-react-apollo": "^4.2.0",
|
||||
"graphql": "^16.8.1",
|
||||
"pbjs": "^0.0.14",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-organize-imports": "^3.2.4"
|
||||
},
|
||||
|
16
pyproject.toml
Normal file
16
pyproject.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[tool.poetry]
|
||||
name = "rbproto"
|
||||
version = "0.1.0"
|
||||
description = ""
|
||||
authors = ["Mike Kalange <countablecloud@gmail.com>"]
|
||||
readme = "README.md"
|
||||
packages = [{include = "rbproto"}]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = ">=3.10,<3.12"
|
||||
protobuf = "^4.25.3"
|
||||
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
1
rbproto/__init__.py
Normal file
1
rbproto/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .python.shot_pb2 import * # noqa: F401
|
41
rbproto/python/shot_pb2.py
Normal file
41
rbproto/python/shot_pb2.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: shot.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
from google.protobuf.internal import builder as _builder
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nshot.proto\x12\x0fserialized_shot\"?\n\x03\x42ox\x12\x0c\n\x04left\x18\x01 \x01(\x02\x12\x0b\n\x03top\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12\x0e\n\x06height\x18\x04 \x01(\x02\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"\x7f\n\rBallDetection\x12.\n\x0eplane_position\x18\x01 \x01(\x0b\x32\x16.serialized_shot.Point\x12(\n\nannotation\x18\x02 \x01(\x0b\x32\x14.serialized_shot.Box\x12\x14\n\x0cinterpolated\x18\x03 \x01(\x08\"T\n\x10RLEBallDetection\x12\x31\n\tdetection\x18\x01 \x01(\x0b\x32\x1e.serialized_shot.BallDetection\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"L\n\x13RLEDetectionHistory\x12\x35\n\ndetections\x18\x01 \x03(\x0b\x32!.serialized_shot.RLEBallDetection\"F\n\x10\x44\x65tectionHistory\x12\x32\n\ndetections\x18\x01 \x03(\x0b\x32\x1e.serialized_shot.BallDetection\"\xe6\x01\n\x04Path\x12\x13\n\x0bstart_frame\x18\x01 \x01(\r\x12\x11\n\tend_frame\x18\x02 \x01(\r\x12\x37\n\ndetections\x18\x03 \x01(\x0b\x32!.serialized_shot.DetectionHistoryH\x00\x12>\n\x0erle_detections\x18\x04 \x01(\x0b\x32$.serialized_shot.RLEDetectionHistoryH\x00\x12\x15\n\x0bnot_present\x18\x05 \x01(\x08H\x00\x12\x11\n\tis_static\x18\x06 \x01(\x08\x42\x13\n\x11\x64\x65tection_history\"R\n\x11IdentifierHistory\x12\x17\n\x0f\x62\x61ll_identifier\x18\x01 \x01(\r\x12$\n\x05paths\x18\x02 \x03(\x0b\x32\x15.serialized_shot.Path\"H\n\x04Shot\x12@\n\x14identifier_histories\x18\x03 \x03(\x0b\x32\".serialized_shot.IdentifierHistoryb\x06proto3')
|
||||
|
||||
_globals = globals()
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'shot_pb2', _globals)
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
DESCRIPTOR._options = None
|
||||
_globals['_BOX']._serialized_start=31
|
||||
_globals['_BOX']._serialized_end=94
|
||||
_globals['_POINT']._serialized_start=96
|
||||
_globals['_POINT']._serialized_end=125
|
||||
_globals['_BALLDETECTION']._serialized_start=127
|
||||
_globals['_BALLDETECTION']._serialized_end=254
|
||||
_globals['_RLEBALLDETECTION']._serialized_start=256
|
||||
_globals['_RLEBALLDETECTION']._serialized_end=340
|
||||
_globals['_RLEDETECTIONHISTORY']._serialized_start=342
|
||||
_globals['_RLEDETECTIONHISTORY']._serialized_end=418
|
||||
_globals['_DETECTIONHISTORY']._serialized_start=420
|
||||
_globals['_DETECTIONHISTORY']._serialized_end=490
|
||||
_globals['_PATH']._serialized_start=493
|
||||
_globals['_PATH']._serialized_end=723
|
||||
_globals['_IDENTIFIERHISTORY']._serialized_start=725
|
||||
_globals['_IDENTIFIERHISTORY']._serialized_end=807
|
||||
_globals['_SHOT']._serialized_start=809
|
||||
_globals['_SHOT']._serialized_end=881
|
||||
# @@protoc_insertion_point(module_scope)
|
86
rbproto/python/shot_pb2.pyi
Normal file
86
rbproto/python/shot_pb2.pyi
Normal file
@@ -0,0 +1,86 @@
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class Box(_message.Message):
|
||||
__slots__ = ["left", "top", "width", "height"]
|
||||
LEFT_FIELD_NUMBER: _ClassVar[int]
|
||||
TOP_FIELD_NUMBER: _ClassVar[int]
|
||||
WIDTH_FIELD_NUMBER: _ClassVar[int]
|
||||
HEIGHT_FIELD_NUMBER: _ClassVar[int]
|
||||
left: float
|
||||
top: float
|
||||
width: float
|
||||
height: float
|
||||
def __init__(self, left: _Optional[float] = ..., top: _Optional[float] = ..., width: _Optional[float] = ..., height: _Optional[float] = ...) -> None: ...
|
||||
|
||||
class Point(_message.Message):
|
||||
__slots__ = ["x", "y"]
|
||||
X_FIELD_NUMBER: _ClassVar[int]
|
||||
Y_FIELD_NUMBER: _ClassVar[int]
|
||||
x: float
|
||||
y: float
|
||||
def __init__(self, x: _Optional[float] = ..., y: _Optional[float] = ...) -> None: ...
|
||||
|
||||
class BallDetection(_message.Message):
|
||||
__slots__ = ["plane_position", "annotation", "interpolated"]
|
||||
PLANE_POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
ANNOTATION_FIELD_NUMBER: _ClassVar[int]
|
||||
INTERPOLATED_FIELD_NUMBER: _ClassVar[int]
|
||||
plane_position: Point
|
||||
annotation: Box
|
||||
interpolated: bool
|
||||
def __init__(self, plane_position: _Optional[_Union[Point, _Mapping]] = ..., annotation: _Optional[_Union[Box, _Mapping]] = ..., interpolated: bool = ...) -> None: ...
|
||||
|
||||
class RLEBallDetection(_message.Message):
|
||||
__slots__ = ["detection", "count"]
|
||||
DETECTION_FIELD_NUMBER: _ClassVar[int]
|
||||
COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
detection: BallDetection
|
||||
count: int
|
||||
def __init__(self, detection: _Optional[_Union[BallDetection, _Mapping]] = ..., count: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class RLEDetectionHistory(_message.Message):
|
||||
__slots__ = ["detections"]
|
||||
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||
detections: _containers.RepeatedCompositeFieldContainer[RLEBallDetection]
|
||||
def __init__(self, detections: _Optional[_Iterable[_Union[RLEBallDetection, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class DetectionHistory(_message.Message):
|
||||
__slots__ = ["detections"]
|
||||
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||
detections: _containers.RepeatedCompositeFieldContainer[BallDetection]
|
||||
def __init__(self, detections: _Optional[_Iterable[_Union[BallDetection, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class Path(_message.Message):
|
||||
__slots__ = ["start_frame", "end_frame", "detections", "rle_detections", "not_present", "is_static"]
|
||||
START_FRAME_FIELD_NUMBER: _ClassVar[int]
|
||||
END_FRAME_FIELD_NUMBER: _ClassVar[int]
|
||||
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||
RLE_DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||
NOT_PRESENT_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_STATIC_FIELD_NUMBER: _ClassVar[int]
|
||||
start_frame: int
|
||||
end_frame: int
|
||||
detections: DetectionHistory
|
||||
rle_detections: RLEDetectionHistory
|
||||
not_present: bool
|
||||
is_static: bool
|
||||
def __init__(self, start_frame: _Optional[int] = ..., end_frame: _Optional[int] = ..., detections: _Optional[_Union[DetectionHistory, _Mapping]] = ..., rle_detections: _Optional[_Union[RLEDetectionHistory, _Mapping]] = ..., not_present: bool = ..., is_static: bool = ...) -> None: ...
|
||||
|
||||
class IdentifierHistory(_message.Message):
|
||||
__slots__ = ["ball_identifier", "paths"]
|
||||
BALL_IDENTIFIER_FIELD_NUMBER: _ClassVar[int]
|
||||
PATHS_FIELD_NUMBER: _ClassVar[int]
|
||||
ball_identifier: int
|
||||
paths: _containers.RepeatedCompositeFieldContainer[Path]
|
||||
def __init__(self, ball_identifier: _Optional[int] = ..., paths: _Optional[_Iterable[_Union[Path, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class Shot(_message.Message):
|
||||
__slots__ = ["identifier_histories"]
|
||||
IDENTIFIER_HISTORIES_FIELD_NUMBER: _ClassVar[int]
|
||||
identifier_histories: _containers.RepeatedCompositeFieldContainer[IdentifierHistory]
|
||||
def __init__(self, identifier_histories: _Optional[_Iterable[_Union[IdentifierHistory, _Mapping]]] = ...) -> None: ...
|
54
rbproto/shot.proto
Normal file
54
rbproto/shot.proto
Normal file
@@ -0,0 +1,54 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package serialized_shot;
|
||||
|
||||
message Box {
|
||||
float left = 1;
|
||||
float top = 2;
|
||||
float width = 3;
|
||||
float height = 4;
|
||||
}
|
||||
|
||||
message Point {
|
||||
float x = 1;
|
||||
float y = 2;
|
||||
}
|
||||
|
||||
message BallDetection {
|
||||
Point plane_position = 1;
|
||||
Box annotation = 2;
|
||||
bool interpolated = 3;
|
||||
}
|
||||
|
||||
message RLEBallDetection {
|
||||
BallDetection detection = 1;
|
||||
uint32 count = 2;
|
||||
}
|
||||
|
||||
message RLEDetectionHistory {
|
||||
repeated RLEBallDetection detections = 1;
|
||||
}
|
||||
|
||||
message DetectionHistory {
|
||||
repeated BallDetection detections = 1;
|
||||
}
|
||||
|
||||
message Path {
|
||||
uint32 start_frame = 1;
|
||||
uint32 end_frame = 2;
|
||||
oneof detection_history {
|
||||
DetectionHistory detections = 3;
|
||||
RLEDetectionHistory rle_detections = 4;
|
||||
bool not_present = 5;
|
||||
}
|
||||
bool is_static = 6;
|
||||
}
|
||||
|
||||
message IdentifierHistory {
|
||||
uint32 ball_identifier = 1;
|
||||
repeated Path paths = 2;
|
||||
}
|
||||
|
||||
message Shot {
|
||||
repeated IdentifierHistory identifier_histories = 3;
|
||||
}
|
1242
rbproto/ts/shot.ts
Normal file
1242
rbproto/ts/shot.ts
Normal file
File diff suppressed because it is too large
Load Diff
481
src/index.tsx
481
src/index.tsx
@@ -49,14 +49,9 @@ export type AggregationIdentifierGql = {
|
||||
groupName: Scalars["String"]["output"];
|
||||
};
|
||||
|
||||
export type AggregationInput = {
|
||||
bucketSet?: InputMaybe<BucketSetInputGql>;
|
||||
enum?: InputMaybe<EnumAggregation>;
|
||||
};
|
||||
|
||||
export type AndFilter = {
|
||||
filters: Array<FilterInput>;
|
||||
};
|
||||
export type AggregationInput =
|
||||
| { bucketSet: BucketSetInputGql; enum?: never }
|
||||
| { bucketSet?: never; enum: EnumAggregation };
|
||||
|
||||
export type BankFeaturesGql = {
|
||||
__typename?: "BankFeaturesGQL";
|
||||
@@ -133,20 +128,201 @@ export type EnumAggregation = {
|
||||
feature: Scalars["String"]["input"];
|
||||
};
|
||||
|
||||
export type FilterInput = {
|
||||
andFilters?: InputMaybe<AndFilter>;
|
||||
cueBallSpeed?: InputMaybe<RangeFilter>;
|
||||
cueObjectAngle?: InputMaybe<RangeFilter>;
|
||||
cueObjectDistance?: InputMaybe<RangeFilter>;
|
||||
difficulty?: InputMaybe<RangeFilter>;
|
||||
intendedPocketType?: InputMaybe<Array<PocketEnum>>;
|
||||
make?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
|
||||
orFilters?: InputMaybe<OrFilter>;
|
||||
shotDirection?: InputMaybe<Array<ShotDirectionEnum>>;
|
||||
tags?: InputMaybe<Array<VideoTagInput>>;
|
||||
targetPocketDistance?: InputMaybe<RangeFilter>;
|
||||
userId?: InputMaybe<Array<Scalars["Int"]["input"]>>;
|
||||
videoId?: InputMaybe<Array<Scalars["Int"]["input"]>>;
|
||||
export type FilterInput =
|
||||
| {
|
||||
andFilters: Array<FilterInput>;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed: RangeFilter;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle: RangeFilter;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance: RangeFilter;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty: RangeFilter;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType: Array<PocketEnum>;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make: Array<Scalars["Boolean"]["input"]>;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters: Array<FilterInput>;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection: Array<ShotDirectionEnum>;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags: Array<VideoTagInput>;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance: RangeFilter;
|
||||
userId?: never;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId: Array<Scalars["Int"]["input"]>;
|
||||
videoId?: never;
|
||||
}
|
||||
| {
|
||||
andFilters?: never;
|
||||
cueBallSpeed?: never;
|
||||
cueObjectAngle?: never;
|
||||
cueObjectDistance?: never;
|
||||
difficulty?: never;
|
||||
intendedPocketType?: never;
|
||||
make?: never;
|
||||
orFilters?: never;
|
||||
shotDirection?: never;
|
||||
tags?: never;
|
||||
targetPocketDistance?: never;
|
||||
userId?: never;
|
||||
videoId: Array<Scalars["Int"]["input"]>;
|
||||
};
|
||||
|
||||
export type GetUploadLinkReturn = {
|
||||
@@ -236,10 +412,6 @@ export type MutationSetLoggerLevelArgs = {
|
||||
path: Scalars["String"]["input"];
|
||||
};
|
||||
|
||||
export type OrFilter = {
|
||||
filters: Array<FilterInput>;
|
||||
};
|
||||
|
||||
export type PageInfoGql = {
|
||||
__typename?: "PageInfoGQL";
|
||||
endCursor?: Maybe<Scalars["String"]["output"]>;
|
||||
@@ -329,6 +501,11 @@ export type RangeFilter = {
|
||||
lessThan?: InputMaybe<Scalars["Float"]["input"]>;
|
||||
};
|
||||
|
||||
export type SerializedShotPathsGql = {
|
||||
__typename?: "SerializedShotPathsGQL";
|
||||
b64EncodedBuffer?: Maybe<Scalars["String"]["output"]>;
|
||||
};
|
||||
|
||||
export enum ShotDirectionEnum {
|
||||
Left = "LEFT",
|
||||
Right = "RIGHT",
|
||||
@@ -343,6 +520,7 @@ export type ShotGql = {
|
||||
endFrame: Scalars["Int"]["output"];
|
||||
id: Scalars["Int"]["output"];
|
||||
pocketingIntentionFeatures?: Maybe<PocketingIntentionFeaturesGql>;
|
||||
serializedShotPaths?: Maybe<SerializedShotPathsGql>;
|
||||
startFrame: Scalars["Int"]["output"];
|
||||
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
|
||||
user?: Maybe<UserGql>;
|
||||
@@ -866,6 +1044,36 @@ export type GetVideoQuery = {
|
||||
};
|
||||
};
|
||||
|
||||
export type GetAverageTimePerShotForVideoQueryVariables = Exact<{
|
||||
videoId: Scalars["Int"]["input"];
|
||||
}>;
|
||||
|
||||
export type GetAverageTimePerShotForVideoQuery = {
|
||||
__typename?: "Query";
|
||||
getVideo: {
|
||||
__typename?: "VideoGQL";
|
||||
averageTimeBetweenShots?: number | null;
|
||||
};
|
||||
};
|
||||
|
||||
export type GetElapsedTimeForVideoQueryVariables = Exact<{
|
||||
videoId: Scalars["Int"]["input"];
|
||||
}>;
|
||||
|
||||
export type GetElapsedTimeForVideoQuery = {
|
||||
__typename?: "Query";
|
||||
getVideo: { __typename?: "VideoGQL"; elapsedTime?: number | null };
|
||||
};
|
||||
|
||||
export type GetMedianRunForVideoQueryVariables = Exact<{
|
||||
videoId: Scalars["Int"]["input"];
|
||||
}>;
|
||||
|
||||
export type GetMedianRunForVideoQuery = {
|
||||
__typename?: "Query";
|
||||
getVideo: { __typename?: "VideoGQL"; medianRun?: number | null };
|
||||
};
|
||||
|
||||
export type CreateUploadStreamMutationVariables = Exact<{
|
||||
videoMetadataInput: VideoMetadataInput;
|
||||
}>;
|
||||
@@ -1937,11 +2145,9 @@ export const GetVideoDetailsDocument = gql`
|
||||
elapsedTime
|
||||
endTime
|
||||
makePercentage
|
||||
makePercentage
|
||||
medianRun
|
||||
startTime
|
||||
totalShots
|
||||
totalShots
|
||||
totalShotsMade
|
||||
createdAt
|
||||
updatedAt
|
||||
@@ -2185,6 +2391,225 @@ export type GetVideoQueryResult = Apollo.QueryResult<
|
||||
GetVideoQuery,
|
||||
GetVideoQueryVariables
|
||||
>;
|
||||
export const GetAverageTimePerShotForVideoDocument = gql`
|
||||
query GetAverageTimePerShotForVideo($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
averageTimeBetweenShots
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useGetAverageTimePerShotForVideoQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useGetAverageTimePerShotForVideoQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetAverageTimePerShotForVideoQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useGetAverageTimePerShotForVideoQuery({
|
||||
* variables: {
|
||||
* videoId: // value for 'videoId'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useGetAverageTimePerShotForVideoQuery(
|
||||
baseOptions: Apollo.QueryHookOptions<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useQuery<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>(GetAverageTimePerShotForVideoDocument, options);
|
||||
}
|
||||
export function useGetAverageTimePerShotForVideoLazyQuery(
|
||||
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useLazyQuery<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>(GetAverageTimePerShotForVideoDocument, options);
|
||||
}
|
||||
export function useGetAverageTimePerShotForVideoSuspenseQuery(
|
||||
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useSuspenseQuery<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>(GetAverageTimePerShotForVideoDocument, options);
|
||||
}
|
||||
export type GetAverageTimePerShotForVideoQueryHookResult = ReturnType<
|
||||
typeof useGetAverageTimePerShotForVideoQuery
|
||||
>;
|
||||
export type GetAverageTimePerShotForVideoLazyQueryHookResult = ReturnType<
|
||||
typeof useGetAverageTimePerShotForVideoLazyQuery
|
||||
>;
|
||||
export type GetAverageTimePerShotForVideoSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetAverageTimePerShotForVideoSuspenseQuery
|
||||
>;
|
||||
export type GetAverageTimePerShotForVideoQueryResult = Apollo.QueryResult<
|
||||
GetAverageTimePerShotForVideoQuery,
|
||||
GetAverageTimePerShotForVideoQueryVariables
|
||||
>;
|
||||
export const GetElapsedTimeForVideoDocument = gql`
|
||||
query GetElapsedTimeForVideo($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
elapsedTime
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useGetElapsedTimeForVideoQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useGetElapsedTimeForVideoQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetElapsedTimeForVideoQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useGetElapsedTimeForVideoQuery({
|
||||
* variables: {
|
||||
* videoId: // value for 'videoId'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useGetElapsedTimeForVideoQuery(
|
||||
baseOptions: Apollo.QueryHookOptions<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useQuery<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>(GetElapsedTimeForVideoDocument, options);
|
||||
}
|
||||
export function useGetElapsedTimeForVideoLazyQuery(
|
||||
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useLazyQuery<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>(GetElapsedTimeForVideoDocument, options);
|
||||
}
|
||||
export function useGetElapsedTimeForVideoSuspenseQuery(
|
||||
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useSuspenseQuery<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>(GetElapsedTimeForVideoDocument, options);
|
||||
}
|
||||
export type GetElapsedTimeForVideoQueryHookResult = ReturnType<
|
||||
typeof useGetElapsedTimeForVideoQuery
|
||||
>;
|
||||
export type GetElapsedTimeForVideoLazyQueryHookResult = ReturnType<
|
||||
typeof useGetElapsedTimeForVideoLazyQuery
|
||||
>;
|
||||
export type GetElapsedTimeForVideoSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetElapsedTimeForVideoSuspenseQuery
|
||||
>;
|
||||
export type GetElapsedTimeForVideoQueryResult = Apollo.QueryResult<
|
||||
GetElapsedTimeForVideoQuery,
|
||||
GetElapsedTimeForVideoQueryVariables
|
||||
>;
|
||||
export const GetMedianRunForVideoDocument = gql`
|
||||
query GetMedianRunForVideo($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
medianRun
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useGetMedianRunForVideoQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useGetMedianRunForVideoQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetMedianRunForVideoQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useGetMedianRunForVideoQuery({
|
||||
* variables: {
|
||||
* videoId: // value for 'videoId'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useGetMedianRunForVideoQuery(
|
||||
baseOptions: Apollo.QueryHookOptions<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useQuery<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>(GetMedianRunForVideoDocument, options);
|
||||
}
|
||||
export function useGetMedianRunForVideoLazyQuery(
|
||||
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useLazyQuery<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>(GetMedianRunForVideoDocument, options);
|
||||
}
|
||||
export function useGetMedianRunForVideoSuspenseQuery(
|
||||
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useSuspenseQuery<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>(GetMedianRunForVideoDocument, options);
|
||||
}
|
||||
export type GetMedianRunForVideoQueryHookResult = ReturnType<
|
||||
typeof useGetMedianRunForVideoQuery
|
||||
>;
|
||||
export type GetMedianRunForVideoLazyQueryHookResult = ReturnType<
|
||||
typeof useGetMedianRunForVideoLazyQuery
|
||||
>;
|
||||
export type GetMedianRunForVideoSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetMedianRunForVideoSuspenseQuery
|
||||
>;
|
||||
export type GetMedianRunForVideoQueryResult = Apollo.QueryResult<
|
||||
GetMedianRunForVideoQuery,
|
||||
GetMedianRunForVideoQueryVariables
|
||||
>;
|
||||
export const CreateUploadStreamDocument = gql`
|
||||
mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) {
|
||||
createUploadStream(videoMetadata: $videoMetadataInput) {
|
||||
|
@@ -91,11 +91,9 @@ query GetVideoDetails($videoId: Int!) {
|
||||
elapsedTime
|
||||
endTime
|
||||
makePercentage
|
||||
makePercentage
|
||||
medianRun
|
||||
startTime
|
||||
totalShots
|
||||
totalShots
|
||||
totalShotsMade
|
||||
createdAt
|
||||
updatedAt
|
||||
@@ -148,3 +146,19 @@ query GetVideo($videoId: Int!) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query GetAverageTimePerShotForVideo($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
averageTimeBetweenShots
|
||||
}
|
||||
}
|
||||
query GetElapsedTimeForVideo($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
elapsedTime
|
||||
}
|
||||
}
|
||||
query GetMedianRunForVideo($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
medianRun
|
||||
}
|
||||
}
|
||||
|
@@ -43,9 +43,9 @@ input AggregateInputGQL {
|
||||
filterInput: FilterInput
|
||||
}
|
||||
|
||||
input AggregationInput {
|
||||
bucketSet: BucketSetInputGQL = null
|
||||
enum: EnumAggregation = null
|
||||
input AggregationInput @oneOf {
|
||||
bucketSet: BucketSetInputGQL
|
||||
enum: EnumAggregation
|
||||
}
|
||||
|
||||
input BucketSetInputGQL {
|
||||
@@ -62,28 +62,20 @@ input EnumAggregation {
|
||||
feature: String!
|
||||
}
|
||||
|
||||
input FilterInput {
|
||||
andFilters: AndFilter = null
|
||||
orFilters: OrFilter = null
|
||||
cueObjectDistance: RangeFilter = null
|
||||
targetPocketDistance: RangeFilter = null
|
||||
cueObjectAngle: RangeFilter = null
|
||||
cueBallSpeed: RangeFilter = null
|
||||
difficulty: RangeFilter = null
|
||||
intendedPocketType: [PocketEnum!] = null
|
||||
shotDirection: [ShotDirectionEnum!] = null
|
||||
videoId: [Int!] = null
|
||||
userId: [Int!] = null
|
||||
make: [Boolean!] = null
|
||||
tags: [VideoTagInput!] = null
|
||||
}
|
||||
|
||||
input AndFilter {
|
||||
filters: [FilterInput!]!
|
||||
}
|
||||
|
||||
input OrFilter {
|
||||
filters: [FilterInput!]!
|
||||
input FilterInput @oneOf {
|
||||
andFilters: [FilterInput!]
|
||||
orFilters: [FilterInput!]
|
||||
cueObjectDistance: RangeFilter
|
||||
targetPocketDistance: RangeFilter
|
||||
cueObjectAngle: RangeFilter
|
||||
cueBallSpeed: RangeFilter
|
||||
difficulty: RangeFilter
|
||||
intendedPocketType: [PocketEnum!]
|
||||
shotDirection: [ShotDirectionEnum!]
|
||||
videoId: [Int!]
|
||||
userId: [Int!]
|
||||
make: [Boolean!]
|
||||
tags: [VideoTagInput!]
|
||||
}
|
||||
|
||||
input RangeFilter {
|
||||
@@ -144,6 +136,7 @@ type ShotGQL {
|
||||
cueObjectFeatures: CueObjectFeaturesGQL
|
||||
pocketingIntentionFeatures: PocketingIntentionFeaturesGQL
|
||||
bankFeatures: BankFeaturesGQL
|
||||
serializedShotPaths: SerializedShotPathsGQL
|
||||
user: UserGQL
|
||||
}
|
||||
|
||||
@@ -177,6 +170,10 @@ enum WallTypeEnum {
|
||||
SHORT
|
||||
}
|
||||
|
||||
type SerializedShotPathsGQL {
|
||||
b64EncodedBuffer: String
|
||||
}
|
||||
|
||||
type UserGQL {
|
||||
id: Int!
|
||||
firebaseUid: String!
|
||||
|
18
yarn.lock
18
yarn.lock
@@ -1553,6 +1553,11 @@ colorette@^2.0.16:
|
||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
|
||||
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
|
||||
|
||||
commander@4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c"
|
||||
integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==
|
||||
|
||||
common-tags@1.8.2:
|
||||
version "1.8.2"
|
||||
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
|
||||
@@ -2538,6 +2543,14 @@ path-type@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||
|
||||
pbjs@^0.0.14:
|
||||
version "0.0.14"
|
||||
resolved "https://registry.yarnpkg.com/pbjs/-/pbjs-0.0.14.tgz#5ab3d4a5f06a9ab78dd320c63f72877120d4c48d"
|
||||
integrity sha512-F4aA0ojrQ37kxFPOg4yRLP/vxb76rYQwMQigmVEljYlA7hZKmjaWjP6IkRn4nA0NdIj4Xxe4iqWrrIhJy+MwWQ==
|
||||
dependencies:
|
||||
commander "4.0.1"
|
||||
protocol-buffers-schema "3.1.0"
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
@@ -2574,6 +2587,11 @@ prop-types@^15.7.2:
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.13.1"
|
||||
|
||||
protocol-buffers-schema@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.1.0.tgz#d8a819549ead3e6bd189ebe9e50e96636bbc5cc7"
|
||||
integrity sha512-1g9zFjLFhGN1Dc5UVO8D2loVslp6sVxk5sJqgD66CuWUITh2gOaTLRN/pIakGFfB6e0nNF6hImrYFDurEsA1UQ==
|
||||
|
||||
punycode@^1.3.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||
|
Reference in New Issue
Block a user